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]的特殊情况

posted @ 2017-04-27 22:32  Reqaw  阅读(584)  评论(0编辑  收藏  举报