Problem Description
有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数m,请将该数插入到序列中,并使新的序列仍然有序。
Input
输入数据包含多个测试实例,每组数据由两行组成,第一行是n和m,第二行是已经有序的n个数的数列。n和m同时为0表示输入数据的结束,本行不做处理。
Output
对于每个测试实例,输出插入新的元素后的数列。
Sample Input
3 3
1 2 4
0 0
Sample Output
1 2 3 4
#include<bits/stdc++.h>
int main() {
int n,m,i,t,j,k;
while(scanf("%d %d",&n,&m),n != 0||m != 0) //当输入n不等于0或者m不等于0的时候继续获取n和m的值,直到获取到n和m同时为0的值
{
int a[101];
for(i=0; i<n; i++)
{
scanf("%d",&a[i]); //依次获取n个数字并将他们依次存放在数组里
}
a[n] = m; //将需要插入的值M赋值给数组的下标N的那个位置
for(j = n-1;j >= 0; j--) //从数组最后开始遍历后面的一个数和前一个数进行比较,后面的数小于前面得数则进行交换
{
if(a[j]>a[j+1]) //三元组交换法(好像是这么叫的)
{k = a[j];
a[j] = a[j+1];
a[j+1] = k;
}else
break;
}
for(i = 0; i <= n ; i++){ //控制输出字符间的空格,如果是最后一个就不在输出字符后输出空格,否则输出
if(i==n){
printf("%d",a[i]);}
else
printf("%d ",a[i]);
}
printf("\n");
}
return 0;
}
刚开始学习,太多不明白的地方,这题也是借鉴了大佬的思路然后跟着大佬做的,可能有不完善的地方。
大佬原题链接:
https://blog.csdn.net/better_space/article/details/52196372