E - 这题有点难(就是算1变成01,0变成10)

E - 这题有点难
Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u

Description

A sequence consisting of one digit, the number 1 is initially written into a computer. At each successive time step, the computer simultaneously tranforms each digit 0 into the sequence 1 0 and each digit 1 into the sequence 0 1. So, after the first time step, the sequence 0 1 is obtained; after the second, the sequence 1 0 0 1, after the third, the sequence 0 1 1 0 1 0 0 1 and so on. 

How many pairs of consequitive zeroes will appear in the sequence after n steps? 
 

Input

Every input line contains one natural number n (0 < n ≤1000).
 

Output

For each input n print the number of consecutive zeroes pairs that will appear in the sequence after n steps. 
 

Sample Input

     
     
2 3
 

Sample Output

     
     
1 1
这个题有病,如果暴力的去计算会超时,他的数的位数是2的n次方个,逐渐的不断增大,导致int不足。这题设计到
大数的相乘运算,包含了高精度算法。还有他的规律是f(n)=f(n-1)+2×F(N-2).老奇葩的题.
还有这个题注意while出的~,不写回超时的,我一个一个测试才找出来的.
#include<stdio.h> #include<string.h> //const int N=1000+10; int a[1010][400]; int main() { memset(a,0,sizeof(a)); a[1][0]=0,a[2][0]=1; int i,j; for(i=3;i<1001;i++) { int c=0; for( j=0;j<=400;j++) { a[i][j]=a[i-1][j]+2*a[i-2][j]+c; c=a[i][j]/10; a[i][j]=a[i][j]%10; } } int n; while(~scanf("%d",&n)) { if(n==1) printf("0\n"); else { for(i=399;i>=0;i--) { if(a[n][i]) break; } for(int j=i;j>-1;j--) { printf("%d",a[n][j]); } printf("\n"); } } }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值