有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数m,请将该数插入到序列中,并使新的序列仍然有序。

有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;
}

img

如有帮助,望采纳!谢谢!


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;
}