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",&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 }