zzuli oj 1118 数列有序

题意描述:
一个非递减有序的整型数组有n个元素,给定一个整数num,将num插入该序列的适当位置,使序列仍保持非递减有序。
要求定义一个函数insert(),将整数num插入在数组a的适当位置上,函数原型如下:
int insert(int a[], int n, int num);
另外函数仍然调用以前定义过的函数PrintArr()输出数组所有元素。
解题思路:
题目分为三种情况:1.被插入数是第一个。2.被插入数是最后一个。3.被插入数位于中间。
输入有三行。第一行是一个正整数n,n<=1000。第二行是n个整数,第三行是待插入整数num。
输出非递减有序的n+1个整数,数据之间用空格隔开。输出占一行。
输出最后一个元素后面没有空格。
代码实现:
 1 #include<stdio.h>
 2 void PrintArr(int a[],int n)
 3 {
 4  int i;
 5     for(i=0;i<=n;i++)
 6  {
 7  if(i==0)printf("%d",a[0]);
 8  else printf(" %d",a[i]); 
 9  } 
10 }
11 int insert(int a[], int n, int num)
12 {
13  int i,t;
14  if(n==1)
15  {
16   if(num>a[0])
17   a[1]=num;
18   else 
19   {
20       a[1]=a[0];
21       a[0]=num;
22   }
23  }
24  else if(num>a[n-1])a[n]=num;
25  else {
26   if(a[0]>num)
27   {
28    for(i=n;i>0;i--)
29    a[i]=a[i-1];
30    a[0]=num;
31   }
32   for(i=0;i<n;i++)
33   {
34       if(a[i]<num&&a[i+1]>num)
35    {
36     t=i+1;
37     for(i=n;i>t;i--)
38     a[i]=a[i-1];
39     a[t]=num;
40    }
41   }
42   } 
43     PrintArr(a, n);
44 }
45 int main()
46 {
47  int n,num,i;
48  int a[1020];
49  scanf("%d",&n);
50  for(i=0;i<n;i++)
51  {
52   scanf("%d",&a[i]);
53  }
54  scanf("%d",&num);
55  insert( a,  n,  num);
56  return 0;
57 }

 

易错分析:
1.题目情况较多,应该先列好框架,再分条编写。
2.函数的最后结果需要带入下一个函数应用可以先编写被带入函数,在直接将函数带入。
3.最后一个元素后面没有空格应该先把第一个分离出来,让之后的每个元素前带空格。
posted @ 2019-02-16 21:29  沅清的小窝  阅读(533)  评论(0编辑  收藏  举报