一个非递减有序的整型数组有n个元素,给定一个整数num,将num插入该序列的适当位置,使序列仍保持非递减有序.
```c
#include<stdio.h>
int main()
{
int a[20];
int n,i,m,j;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[n]);
}
scanf("%d",&m);
for(i=0;i<n;i++)
{
if(m<=a[i])break;
}
j=i;
for(i=n;i>j;i--)
{
a[i]=a[i-1];
}
a[i]=m;
for(i=0;i<n;i++)
{
printf("%d ",a[i]);
}
printf("%d",a[n]);
return 0;
}
```唉,为啥运行结果不正确啊。拜托大神指点一下。
scanf("%d",&a[n]); 输入语句修改为: scanf("%d",&a[i]);
改正如下
#include<stdio.h>
int main()
{
int a[20];
int n, i, m, j;
scanf_s("%d", &n);
for (i = 0; i < n-1; i++) // i < n改成i < n-1。总的列表有n个数,你要插入一个,那么初始的列表应该只有n-1个数,否则你插入之后,最后一个数据将丢失
{
scanf_s("%d", &a[i]); //a[n]改成a[i],这里应该是书写错误
}
scanf_s("%d", &m);
for (i = 0; i < n-1; i++) // i < n改成i < n-1。
{
if (m <= a[i])break;
}
j = i;
for (i = n; i > j; i--)
{
a[i] = a[i - 1];
}
a[i] = m;
for (i = 0; i < n; i++)
{
printf("%d ", a[i]);
}
//printf("%d", a[n]); //注释掉这行,a[n]数组越界了,最大下表是a[n-1],因为是从0开始算的。
return 0;
}