游客 Signup | Login
中文 | En

1191 - C语言7.15

给定15个按从大到小已经有序的整数,将其放在一个数组中。另外输入一个整数,要求使用折半查找法找出该数是数组中的第几个元素的值。如果该数不在数组中,则输出“NO”。

Input

第一行有15个整数,即15个从大到小已有序的原始整数。

第二行有一个整数,表示需要使用折半查找法查找的元素。

Output

如果查找到了输入的整数,则输出此数在序列中的序号,即第一个是0,最后一个是14。

如果查找不到这个整数,则输出“NO”。
请注意不需要输出引号,并请注意行尾输出换行。

Examples

Input

1 3 5 7 9 10 13 15 16 17 20 21 22 23 24
10

Output

5

Solution C

#include<stdio.h>
int main()
{
  int i,n;
  int a[15];
  int low=0,high=14;
  int mid;
  for(i=0;i<15;i++)
    scanf("%d",&a[i]);
  scanf("%d",&n);
  while(low!=high){
    mid=(low+high)/2;
    if(n<a[mid])
      high=mid;
    else if(n>a[mid])
      low=mid;
    else if(n==a[mid]){
      printf("%d\n",mid);
      break;
    }
  }
  if(low==high)
    printf("NO\n");
  return 0;
}

Solution C++

#include <stdio.h>
int main() {
	int dat[15];
	int i, q, l, r, mid;
	for (i = 0;i < 15;i++)
		scanf("%d", &dat[i]);
	scanf("%d", &q);
	l = 0; r = 14;
	while (l < r) {
		mid = (l + r) / 2;
		if (dat[mid] < q)
			l = mid + 1;
		else
			r = mid;
	}
	if (dat[l] == q)
		printf("%d\n", l);
	else
		puts("NO");
	return 0;
}

Time Limit 1 second
Memory Limit 32 MB
Discuss Stats
上一题 下一题