题目:
一个非递减有序的整型数组有n个元素,给定一个整数num,将num插入该序列的适当位置,使序列仍保持非递减有序。要求定义一个函数insert(),将整数num插入在数组a的适当位置上,函数原型如下:
int insert(int a[], int n, int num); 另外函数仍然调用以前定义过的函数PrintArr()输出数组所有元素。
输入:
输入有三行。第一行是一个正整数n,n<1000。第二行是n个整数,第三行是待插入整数num。
输出:
输出非递减有序的n+1个整数,数据之间用空格隔开。输出占一行。
Exemple:
输入:
5
1 2 4 5 6
3
输出:
1 2 3 4 5 6
My DaiMa:
#include<stdio.h> int insert(int a[], int n, int x) //这个调用函数用来求出数组中哪个数比x大 { int i,k; for(i=0;i<n;i++) { if(x<a[i]) //比较第几个数开始比x大,然后记录这个数的下标,把他赋值给k { k=i; break; } else if(x>=a[n-1]) //这是x比数组中所有数都大的情况,此时k=n { k=n; break; } } return k; } void PrintArr(int a[],int n,int x,int k) { int i=n; while(i>k) //从第k+1个数开始后面的数都往后推一个下标,but要从n开始倒着 { 往前面推每个数都等于他前面的那个数,因为第n个数是个空瓶子 a[i]=a[i-1]; i--; } a[k]=x;//直到i=k是跳出循环,让x赋值给第k个数 for(i=0;i<n;i++) printf("%d ",a[i]); printf("%d",a[n]); //然后依次输出n个数,第n个数后面没有空格 } int main() { int n,a[1000],i,x,k; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&a[i]); scanf("%d",&x); k=insert(a,n,x); PrintArr(a,n,x,k); return 0; } |