问题:有一个已排好的数组,今输入一个数,要求按原来的规律将它插入数组中。(原来的数组为:1,4,6,9,13,16,19,28,40,100)
Input: 10 outputs: 1,4,6,9,10,13,16,19,28,40,100
下面是我写的
#include <iostream>
using namespace std;
int main()
{
int a[20]={1,4,6,9,13,16,19,28,40,100},n=0,x,save1,save2;
cout <<"请输入一个数字:";
cin >> x;
while (n <= 20)
{
if ( a[n] <= x && a[n+1] >= x)
{
save1 = a[n+1];
a[n+1] = x;
n = n+2;
while (n<= 20)
{
save2 = a[n];
a[n] = save1;
save1=save2;
n++;
}
}
else
n++;
}
n=0;
save1=0;
while (a[n] !=0)
{
n++;
}
while (save1 < n-1)
{
cout <<a[save1] <<",";
save1++;
}
cout << a[n-1];
}
运行的时候可以得到结果,但是出现报错Run-Time Check Failure #2 - Stack around the variable 'a' was corrupted.,原因在哪?
你的判断a[n] <= x && a[n+1] >= x, 你输入101的时候n一直++要超出范围了..
目测你的数字中最小应该是1咯, 那就按下面的方法写, 当然也可以再开个数组用memcpy去写,这个你可以自己去试验一下.
int a[20]={1,4,6,9,13,16,19,28,40,100},n=0,x,save1,save2;
cout <<"请输入一个数字:";
cin >> x;
while(a[n] != 0)
{
n++;
}
save1 = n;
n = 0;
while (n < 20)
{
if ( a[n] <= x && a[n+1] >= x)
{
save2 = n+1;
n = save1;
while(n >= save2)
{
a[n+1] = a[n];
n--;
}
a[save2] = x;
break;
}
else if ( a[n] == 0)
{
a[n+1] = x;
break;
}
n++;
}
n = 0;
while(n<20 && a[n] != 0)
{
cout<<a[n++] << ",";
}
第2个问题:你现在的程序有bug。当插入的数为0、或者110这样,应该插在第一个位置或者是增加在最后一个的时候,你目前的程序是没有效果的。