这是由于原来的程序采用了递归,而且递归程序中的局部变量有较大的数组。当递归层数太多时,就会造成系统栈溢出,而导致程序崩溃。
以下的程序改为非递归的,就不会再有此现象:
#include
void f(int n,int a[],int b[])
{
int j,i,c[20000];
for(i=0;i<2*n;i++) c[i]=a[i];
for(i=0,j=1;i for(j=0;i<2*n;i++,j=j+2) a[j]=c[i]; } int main() { int i,n,a[20000],b[20000],num=0; //做到20000张牌也能正确出解 scanf("%d",&n); for(i=0;i<2*n;i++) a[i]=i; for(i=0;i<2*n;i++) b[i]=i; for(i=0;i { f(n,a,b); num++; for(i=0;i<2*n;i++) if(a[i]!=b[i])break; } printf("%d\n",num); return 0; }
//采纳答案很对,但是函数可以少传入一个变量,for循环可以合并下
#include
void f(int n,int a[])
{
int j,i,c[20000];
for(i=0; i<2*n; i++) c[i]=a[i];
for(i=0,j=1; i
}
int main()
{
int i,n,a[20000],b[20000],num=0,flag=1; //做到20000张牌也能正确出解
scanf("%d",&n);
for(i=0; i<2*n; i++)
{
a[i]=i;
b[i]=i;
}
for(i=0; i
f(n,a);
num++;
for(i=0; i<2*n; i++)
{
if(a[i]!=b[i]) break;
}
}
printf("%d\n",num);
return 0;
}