1191 - C语言7.15

通过次数

0

提交次数

0

时间限制 : 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 ;
		 }
	  }
   }
}