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; }