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

D - 数列有序! 有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数x,请将该数插入到序列中,并使新的序列仍然有序。
#include <stdio.h>
int main()
{
  int m,n,a,b,c,q,h,r,t;
  while (scanf("%d%d",&n,&m)!=EOF)
  {
    int a[n+1];
    if(n==0 && m==0)
    break;
    else
    for(c=0;c<n-1;c++)
    {
      scanf("%d",&a[c]);
    }
    a[c+1]=m;
    for(h=1;h<n+1;h++)
{
    q=0;
    for(r=0;r<n+1-h;r++)
    {
    if(a[r]>a[r+1])
{
    t=a[r];
    a[r]=a[r+1];
    a[r+1]=t;
    q=1;
}
    } 
    if (q==0)  break;
   }
     for(h=0;h<n+1;h++)
      {
         printf(" %d",a[h]);
      }
      printf("\n");
  }
         return 0;
 }
Sample Input
3 3
1 2 4
0 0
 
Sample Output
1 2 3 4
我按照例子输入  但是不知道怎么回事  出来个32  求大神指导
------解决方案--------------------

for(c=0;c<n-1;c++)
    {
      scanf("%d",&a[c]);
    }
    a[c+1]=m;

这是给数组赋值的吧?
这里赋值有错误,改为

for(c=0;c<n;c++)
    {
      scanf("%d",&a[c]);
    }
    a[c]=m;

就行了!
下面两个for循环是排序的吧,但是题目都说了数组已经是有序的了,就不必再重新排序了,直接查找插入就行了吧。
------解决方案--------------------
这是插入排序的内循环中的内容。
直接查找,或者二分查找,然后插入适当的位置,插入前,此位置后的所有元素必须先后移。
------解决方案--------------------
二分查找。类似std::set
------解决方案--------------------
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
单步调试和设断点调试是程序员必须掌握的技能之一。

------解决方案--------------------
刚刚找了一下,题号是杭电2019.我写的代码纯粹是为了AC
就是输入一个数检测是否比X小,小则直接输出,如果第一个比X大的则先输出X,再输出数值,以后的数值只需输入输出。
不需要二分,浪费空间时间。你如果感觉别扭,你可以存在数组里输一个存一个,输完了也就存了。
附上刚写的代码

#include <stdio.h>
int main(int argc, char *argv[])
{
int n,i,x,temp,flag;
while(scanf("%d%d",&n,&x) && (n!=0 
------解决方案--------------------
 x!=0))
{   flag=0;
if(n==0)
{printf("%d\n",x);
continue;}
for(i=0;i<n;i++)
{scanf("%d",&temp);
if(temp<x 
------解决方案--------------------
 flag==1)
printf("%d",temp);
else
    {printf("%d %d",x,temp);
flag=1;}
if(i!=n-1)
printf(" ");
}
printf("\n");
}
return 0;
}