有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数m,请将该数插入到序列中,并使新的序列仍然有序。
问题描述:
输入
输入数据包含多个测试实例,每组数据由两行组成,第一行是n和m,第二行是已经有序的n个数的数列。n和m同时为0标示输入数据的结束,本行不做处理。
输出
对于每个测试实例,输出插入新的元素后的数列。
难度
一般
输入示例
3 3
1 2 4
0 0
输出示例
1 2 3 4
答
#include <stdio.h>
#include <stdlib.h>
int cmp(const void *p1, const void *p2)
{
return *(int *)p1 - *(int *)p2;
}
int main()
{
int n, m, i, a[111];
while (scanf("%d%d", &n, &m) != EOF)
{
if (m == 0 && n == 0)
break;
a[n] = 0;
for (i = 0; i < n; i++)
scanf("%d", &a[i]);
a[n] = m;
qsort(a, n + 1, sizeof(a[0]), cmp);
for (i = 0; i < n + 1; i++)
{
if (i == 0)
printf("%d", a[0]);
else
printf(" %d", a[i]);
}
printf("\n");
}
return 0;
}
如有帮助,望采纳!谢谢!
答
int main()
{
int a,b;
scanf("%d %d",&a,&b);
getchar();
while(a && b)
{
int num,flag=0;
for(int i=0;i<a;++i)
{
scanf("%d",&num);
if(num > b && flag==0)
{
printf("%d ",b);
flag=1;
}
printf("%d ",num);
}
printf("\n");
scanf("%d %d",&a,&b);
getchar();
}
return 0;
}
答
#include<stdio.h>
int main()
{
int m,n,i,j,h;
int a[100]={1,5,9,14,23,34,45,56,67,78,89,99,105,126,156};
scanf("%d,%d",&m,&n);
for(i=0;i<15;i++)//这里i<16;改成i<15;因为插入前数组有15个元素
{
if(m<=a[i])//这里m<a[i]改成m<=a[i]{
for(j=14;j>=i;j--)
a[j+1]=a[j];
a[i]=m;
break;//这里加break;插入m后退出循环
}
}
for(i=0;i<16;i++){
if(n<=a[i])//这里n<a[i]改成n<=a[i]
{
for(j=15;j>=i;j--)
a[j+1]=a[j];
a[i]=n;
break;//这里加break;插入n后退出循环
}
}
for(i=0;i<17;i++)//这里i<16;改成i<17;因为插入后数组有17个元素
printf("%d",a[i]);
return0;
}