题意描述:
一个非递减有序的整型数组有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个整数,数据之间用空格隔开。输出占一行。
输出最后一个元素后面没有空格。
代码实现:
一个非递减有序的整型数组有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.最后一个元素后面没有空格应该先把第一个分离出来,让之后的每个元素前带空格。
1.题目情况较多,应该先列好框架,再分条编写。
2.函数的最后结果需要带入下一个函数应用可以先编写被带入函数,在直接将函数带入。
3.最后一个元素后面没有空格应该先把第一个分离出来,让之后的每个元素前带空格。