1117 查找数组元素
题目来源:
https://acm.zzuli.edu.cn/zzuliacm/problem.php?id=1117
Description
编写程序,输入n(1<=n<=10),输入n个整数构成一个数组,输入整数x,在这个数组中查找x是否存在,如果存在,删除x,后面元素依次向前添补空位,并输出删除元
素后的数组。如果不存在,输出“Not Found”。
定义一个查找函数find(),在数组a中查找x,若找不到函数返回-1,若找到返回x的下标,函数原型如下:
int find(int a[], int n, int x);
然后在main()中,先调用函数find(),若查找失败输出“Not Found";若查找成功,则调用上一题中定义的函数del()删除该元素,再调用上一题中的PrintArr()输出删除元素后的数组内容。
Input
输入第一行是一个正整数n(1<=n<=10);
第二行是n个整数,构成一个数组;
第三行是一个整数x,表示待查找元素。
Output
输出删除元素后的数组,每个元素占4列,右对齐。如果不存在,输出“Not Found”。如果数组中有多个x,只删除下标最小的那个。
Sample Input
6
3 6 2 4 7 9
4
Sample Output
3 6 2 7 9
题意描述:
输入元素个数n及n的元素和需要查找的元素x
若x在数组中,就将其删除后输出新数组,若不在数组中就输出“Not Found”
解题思路:
先调用find()函数,若查找不成功,输出“Not Found”,若查找成功调用del()函数删除该元素,再调用PrintfArr()函数输出新数组
程序代码:
1 #include<stdio.h> 2 void del(int a[],int n,int x); 3 void PrintArr(int a[],int n); 4 int find(int a[],int n,int x); 5 int main() 6 { 7 int n,a[20],x,i,j; 8 while(scanf("%d",&n) != EOF) 9 { 10 for(i=0;i<n;i++) 11 { 12 scanf("%d",&a[i]); 13 } 14 scanf("%d",&x); 15 if(find(a,n,x)) 16 { 17 if(n==1&&x==a[0]) 18 continue; 19 del(a,n,x); 20 PrintArr(a,n-1); 21 printf("\n"); 22 } 23 else 24 printf("Not Found\n"); 25 } 26 return 0; 27 } 28 int find(int a[],int n,int x) 29 { 30 int i; 31 for(i=0;i<n;i++) 32 { 33 if(a[i]==x) 34 return 1; 35 } 36 return 0; 37 } 38 void del(int a[],int n,int x) 39 { 40 int i,j; 41 for(i=0;i<n;i++) 42 { 43 if(x==a[i]) 44 { 45 for(j=i;j<n;j++) 46 { 47 a[j]=a[j+1]; 48 } 49 break; 50 } 51 } 52 } 53 void PrintArr(int a[],int n) 54 { 55 int i; 56 for(i=0;i<n;i++) 57 { 58 printf("%4d",a[i]); 59 } 60 }
易错分析:
注意n=1,x==a[0]的特殊情况
欢迎交流,共同进步——