求助
  • 板块学术版
  • 楼主Blue_Fish
  • 当前回复1
  • 已保存回复1
  • 发布时间2020/11/15 17:28
  • 上次更新2023/11/5 07:59:40
查看原帖
求助
405241
Blue_Fish楼主2020/11/15 17:28

已知一个已经排好序的序列,不妨认为是从小到大排序的整数序列,想知道一个整数x是否在该序列中,可以采用二分查找的策略:先让x与序列中间的那个整数比较,如果相等,表明已经找到;如果x小于中间的整数,则在小于中间整数的序列部分中查找;如果x大于中间的整数,则在大于中间整数的序列部分中查找。


从标准输入中读取输入,分为若干行。第一行为一个整数N,0<N<=50,第二行为N个已经按从小到大排好序的整数,这些整数各不相同,且大小在[-1000,1000]范围内。第三行是一个整数M,0<M<=10表示有M个数要查找,之后的M行每行一个整数,表示要查找的数(大小也在[-1000,1000]范围内,但可能未出现在序列中)。


输出到标准输出,共有M行,每行一个数,依次对应每个待查找的数在序列中查找的次数。每次待查找数与某个数做比较就算一次查找。注意,与中间整数的比较要考虑大于、小于、等于等不同的情况,但由于是和同一个数做比较,只算一次查找。另外规定,当待查找的序列部分共有2k+1(k为整数)个数时,中间的数为第k+1个数;当待查找的序列部分共有2k个数时,中间的数为第k个数。

[输入样例]

10

1 2 3 4 5 6 7 8 9 10

3

5

6

11

[输出样例]

1

3

4

[样例说明]

待查找数是5时,第一次查找就找到。待查找数是6时,第一次查找结果是大于中间数5,因此在6、7、8、9、10中查找;第二次查找结果是小于中间数8,因此在6、7中查找;第三次查找找到。待查找数是11时,第一次查找结果是大于中间数5,因此在6、7、8、9、10中查找;第二次查找结果是大于中间数8,因此在9、10中查找;第三次查找结果是大于中间数9,因此在10中查找;第四次查找,没有找到,且没有更多序列部分可比较。

2020/11/15 17:28
加载中...