C语言拯救计划Day4-1之查找整数

本题要求从输入的N个整数中查找给定的X。如果找到,输出X的位置(从0开始数);如果没有找到,输出“Not Found”。

输入格式:

输入在第一行中给出两个正整数N(≤20)和X,第二行给出N个整数。数字均不超过长整型,其间以空格分隔。

输出格式:

在一行中输出X的位置,或者“Not Found”。

输入样例1:

5 7
3 5 7 1 9
 

输出样例1:

2
 

输入样例2:

5 7
3 5 8 1 9
 

输出样例2:

Not Found






 1    #include<stdio.h>
 2    #include<stdlib.h>
 3    int main()
 4    {
 5         //输出预处理
 6         int i,b=0,c=0,N,X;
 7         scanf("%d %d
",&N,&X);
 8         int a[N];
 9         c=N;
10         for(i=0;i<c;i++)
11         {
12            scanf("%d",&a[i]);
13         }
14          //遍历数组,判断a[i]是否与x相等,如果相等就标记为1,且输出a[i]所在的位置下标,退出遍历循环
15           for(i=0;i<c;i++)
16         {   if(a[i]==X)
17            {
18             b=1;
19             printf("%d",i);
20             break;
21            }    
22           
23         }
24            //判断标记是否为0,若为0则说明没有退出循环,没有找到与x相等的a[i],输出不存在
25            if(b==0)
26            {
27                 printf("Not Found");
28            }
29    
30 
31           return 0;
32    }  

还有一种二分查找的做法,但是有问题,也不知道到底哪里出错了。。。 

 2 #include <stdlib.h>
  #include <stdio.h> 3 int Binary_Search(int *a,int n,int key) 4 { 5 int low,high,mid; 6 low=1; /*定义最底下标为记录首位*/ 7 high=n; /*定义最高下标为记录末位*/ 8 while(low<=high) 9 { 10 mid=(low+high)/2; /*折半*/ 11 if(key<a[mid]) 12 high=mid-1; 13 if(key>a[mid]) 14 low=mid+1; 15 else 16 return mid-1; 17 } 18 return 0; 19 } 20 int cmp(const void *a,const void *b){ 21 return *(int*)a-*(int *)b; 22 } 23 int main() 24 { 25 int n; 26 int x;
    int ans=-1;
27 scanf("%d %d",&n,&x); 28 int a[20]={0}; 29 int i; 30 for (i=0;i<n;i++){ 31 scanf("%d",&a[i]); 32 } 33 for (i=0;i<n;i++){ 34 qsort(a,n,sizeof(int),cmp); 35 ans = Binary_Search(a,n,x); 36 } 37 if (ans==0) printf("Not Found"); 38 else printf("%d",ans); 39 40 41 return 0; 42 }
原文地址:https://www.cnblogs.com/noobchen/p/12786747.html