Computer Transformation
How many pairs of consequitive zeroes will appear in the sequence after n steps?
2 3
1 1
/*这一题首先要分析、找规律:shu[i]=shu[i-1]*2+1(i是偶数)
shu[i]=shu[i-1]*2-1(i是奇数)
又因为计算结果非常大,所以要用到大数*/
#include<stdio.h>
#include<string.h>
int shu[1010][1010];//定义数组来存放 0—1000的所有运算结果
int main()
{
int i,j,k,n;
memset(shu,0,sizeof(shu));//将数组 shu 清零
shu[0][0]=0;
shu[1][0]=0;
for(i=2;i<=1000;i++)//根据规律计算每个数的结果
{
for(j=0;j<1010;j++)
{
shu[i][j]=shu[i][j]+shu[i-1][j]*2;
if(shu[i][j]>=10)
{
shu[i][j]=shu[i][j]-10;
shu[i][j+1]=shu[i][j+1]+1;
}
}
if(i%2==0)
{
shu[i][0]=shu[i][0]+1;
if(shu[i][0]>=10)
{
shu[i][0]=shu[i][0]-10;
for(k=1;k<1010;k++)
{
shu[i][k]=shu[i][k]+1;
if(shu[i][k]<10)
break;
else
shu[i][k]=shu[i][k]-10;
}
}
}
if(i%2!=0)
{
shu[i][0]=shu[i][0]-1;
if(shu[i][0]<0)
{
shu[i][0]=shu[i][0]+10;
for(k=1;k<1010;k++)
{
shu[i][k]=shu[i][k]-1;
if(shu[i][k]>0)
break;
else
shu[i][k]=shu[i][k]+10;
}
}
}
}
while(scanf("%d",&n)!=EOF)
{
for(i=1009;i>=0&&shu[n][i]==0;i--);//注意输出结果时不能输出前面的 0
if(i>=0)
{
for(;i>=0;i--)
printf("%d",shu[n][i]);
}
else
printf("0");
printf("\n");
}
return 0;
}