数列有序

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 15:57   2125   0

题目:

一个非递减有序的整型数组有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;
}

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP