问题 F: 有序数组中插入元素
时间限制: 1 Sec 内存限制: 128 MB
提交: 2116 解决: 967
[提交][状态][讨论版]
题目描述
输入n(n<=20),输入n个有序整数(降序或升序)。插入元素e,使新序列仍按原来的排序规则为有序序列。
输入
输入测试次数t
每行测试数据占两行,格式为:
第一行,整数n,后跟n个有序整数
第二行,插入整数e
输出
对每组测试数据,输出插入元素后的有序序列
样例输入
3 5 10 20 30 40 50 23 15 90 80 70 60 50 45 40 35 30 25 20 15 10 5 -10 100 4 80 70 60 50 55
样例输出
10 20 23 30 40 50 100 90 80 70 60 50 45 40 35 30 25 20 15 10 5 -10 80 70 60 55 50
提示
#include<stdio.h>
int main()
{
int a[20]={0},x,i,j,t,n,flag,flag2;
scanf("%d",&t);
while(t--)
{ flag=0;flag2=0;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
scanf("%d",&x);
for(i=0;i<n;i++)
if((a[i]>=x&&a[i+1]<=x)||(a[i]<=x&&a[i+1]>=x))
{
{
for(j=n+1;j>i+1;j--)//前面的值付给后面
a[j]=a[j-1];
}
a[i+1]=x;
for(i=0;i<n+1;i++)
{
printf("%d",a[i]);
if(i<n)printf(" ");
}flag2=1;
break;
}
if(!((a[i]>=x&&a[i+1]<=x)||(a[i]<=x&&a[i+1]>=x)))// 没有这个值
{
if(x>=a[0]&&x>=a[n-1])
if(a[0]<a[n])
x=a[n+1];
else
{
for(i=n;i>0;i--)
a[i]=a[i-1];
a[0]=x;
} //还要将其放在最后面或最前面
if(x<=a[0]&&x<=a[n-1])
if(a[0]>a[n])
x=a[n+1];
else
{
for(i=n;i>0;i--)
a[i]=a[i-1];
a[0]=x;
}
if(flag2==0) for(i=0;i<n+1;i++)
{
printf("%d",a[i]);
if(i<n)printf(" ");
}
}
printf("\n");
}
return 1;
}