1191 - C语言7.15
时间限制 : 1 秒
内存限制 : 32 MB
给定15个按从大到小已经有序的整数,将其放在一个数组中。另外输入一个整数,要求使用折半查找法找出该数是数组中的第几个元素的值。如果该数不在数组中,则输出“NO”。
题目输入
第一行有15个整数,即15个从大到小已有序的原始整数。
第二行有一个整数,表示需要使用折半查找法查找的元素。
题目输出
如果查找到了输入的整数,则输出此数在序列中的序号,即第一个是0,最后一个是14。
如果查找不到这个整数,则输出“NO”。
请注意不需要输出引号,并请注意行尾输出换行。
输入/输出样例
输入格式
1 3 5 7 9 10 13 15 16 17 20 21 22 23 24 10
输出格式
5
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; }
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; }
Java解答
import java.util.Scanner; public class Main{ private static Scanner s = new Scanner(System.in) ; public static void main(String[] args) { int a[] = new int[15] ; for (int i = 0; i < 15; i++) { a[i] = s.nextInt() ; } int num = s.nextInt() ; for (int i = 0; i < a.length; i++) { if(a[i]==num){ System.out.println(i); break ; } } } }