ZZULIOJ题解
1118: 数列有序
题目描述
一个非递减有序的整型数组有n个元素,给定一个整数num,将num插入该序列的适当位置,使序列仍保持非递减有序。
要求定义一个函数insert(),将整数num插入在数组a的适当位置上,函数原型如下:
int insert(int a[], int n, int num);
另外函数仍然调用以前定义过的函数PrintArr()输出数组所有元素。
输入
输入有三行。第一行是一个正整数n,n<=1000。第二行是n个整数,第三行是待插入整数num。
输出
输出非递减有序的n+1个整数,数据之间用空格隔开。输出占一行。
样例输入
5
1 2 4 5 6
3
样例输出
1 2 3 4 5 6
本题和上一题的主要思想也无差别。遍历一次。找到合适位置插入即可。
代码
#include<stdio.h>
void PrintArr(int a[],int n)
{
for(int i=0;i<n;i++)//利用循环实现元素输出
printf("%d ",a[i]);//输出前n个数字
}
void insert(int a[],int n,int x)
{
int i;
for(i=n-1;i>=0;i--)
{
if(x<a[i])//如果
a[i+1]=a[i];
else break;//说明前面数字已经没有符合条件的了
}
a[i+1]=x;//此时要将第i+1个数字赋值为x
}
int a[1001];//开辟数组a[]的空间
int main(){
int i,n,x;//定义循环变量i和数组元素个数n以及要删除的元素下标x
scanf("%d",&n);//键盘输入n
for(i=0;i<n;i++)//键盘输入数组a[]
scanf("%d",&a[i]);
scanf("%d",&x);//键盘输入x
insert(a,n,x);//执行插入函数
PrintArr(a,n);//输出前n个
printf("%d",a[n]);//和最后一个数字
return 0;//程序正常结束
}