本题要求输入n个数,并插入一个数字 ,同时使数列保持升序。
输入样例1:
2
1 6
0
输出样例1:
0 1 6
输入样例2:
5
1 3 4 6 7
2
输出样例2:
1 2 3 4 6 7
先上代码:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
int m = 0,n = 0, i = 0, j = 0;
int a[50] = { 0 };
scanf("%d", &n);
for (i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
scanf("%d", &j);
for (i = 0; i < n; i++)
{
if (a[i] < j)
continue;//如果数列第一个数字小于插入数字,继续往后推一位
if (a[i] > j)
{
m = i;
for (i = n; i > m; i--)
{
a[i] = a[i - 1];/*将后一位的值变成前一位的值,数列整体后移一位,截止到插入的位置*/
}
a[m] = j;
break;
}
}
for (i = 0; i <= n; i++)
{
printf("%4d", a[i]);
}
return 0;
}
第一遍做的时候,运行结果是0 0 0, 自己将数列取0了,第二处备注那里从后面开始替换的,第一遍写是从前面开始替换,如a[0]=a[1],a[1]=a[2],导致结果为 0 0 0 。从后面一位开始替换就不会这样了。
|