zoukankan      html  css  js  c++  java
  • Computer Transformation(规律,大数打表)

    Computer Transformation

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
    Total Submission(s): 6946    Accepted Submission(s): 2515


    Problem 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
    题解:f(n)=2*f(n-2)+f(n-1)由于每个n-2的00生成两个01,在n的地方就会生成两个00;n-1的00在n生成一个00;由此可以找出规律;
    代码:
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cmath>
     5 #include<algorithm>
     6 using namespace std;
     7 #define mem(x,y) memset(x,y,sizeof(x))
     8 typedef long long LL;
     9 const int MAXN=1010;
    10 char dp[MAXN][MAXN];
    11 char c[MAXN];
    12 int x[MAXN],y[MAXN],z[MAXN];
    13 void bigsum(char *a,char *b){
    14     int len1,len2;
    15     mem(x,0);mem(y,0);mem(z,0);
    16     len1=strlen(a);len2=strlen(b);
    17     int len=max(len1,len2);
    18     for(int i=len1-1,j=0;i>=0;i--,j++)x[j]=a[i]-'0';
    19     for(int i=len2-1,j=0;i>=0;i--,j++)y[j]=b[i]-'0';
    20     for(int i=0;i<len;i++){
    21         z[i]=x[i]+y[i]+z[i];
    22         z[i+1]+=z[i]/10;
    23         z[i]%=10;
    24         if(z[len])len++;
    25     }
    26     for(int i=len-1,j=0;i>=0;i--,j++)c[j]=z[i]+'0';
    27     c[len]='';
    28 }
    29 int main(){
    30     int n;
    31     dp[1][0]='0';dp[1][1]='';
    32     dp[2][0]='1';dp[2][1]='';
    33     for(int i=3;i<=1000;i++){
    34         bigsum(dp[i-1],dp[i-2]);
    35         bigsum(c,dp[i-2]);
    36         memcpy(dp[i],c,sizeof(c));
    37     }
    38     while(~scanf("%d",&n)){
    39         printf("%s
    ",dp[n]);
    40     }
    41     return 0;
    42 }
     
  • 相关阅读:
    剑指offer——最小的K个数和数组中第K大的元素
    Leetcode刷题指南链接整理
    160. Intersection of Two Linked Lists
    100. Same Tree
    92. Reverse Linked List II
    94. Binary Tree Inorder Traversal
    79. Word Search
    78,90,Subsets,46,47,Permutations,39,40 DFS 大合集
    0x16 Tire之最大的异或对
    0x16 Tire
  • 原文地址:https://www.cnblogs.com/handsomecui/p/4966819.html
Copyright © 2011-2022 走看看