码迷,mamicode.com
首页 > 其他好文 > 详细

H - Computer Transformation(简单数学题+大数)

时间:2016-10-15 20:02:57      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:

H - Computer Transformation

Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u

Submit Status Practice _

Appoint description: 

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

 

//这题意思是

1 01        0

2 1001       1

3 01101001    1 

1->01 0->10

就这么一直变下去,问 n 步之后,有多少个相邻的 0

 

我是先输出模拟了大概 8 项找出了规律,然后。。。wa

因为数据太大,long long 也存不下

然后用字符串,当做大数处理,就可以了,注意一些细节问题,代码里有

 

技术分享
  1 /*
  2 //EEE
  3 #include <stdio.h>
  4 #include <string.h>
  5 
  6 char ch[10][1200];
  7 
  8 int main()
  9 {
 10     strcpy(ch[0],"01");
 11 
 12     for (int i=1;i<10;i++)
 13     {
 14         int k=0;
 15         int len=strlen(ch[i-1]);
 16         for (int j=0;j<len;j++)
 17         {
 18             if (ch[i-1][j]==‘0‘)
 19             {
 20                 ch[i][k++]=‘1‘;
 21                 ch[i][k++]=‘0‘;
 22             }
 23             else
 24             {
 25                 ch[i][k++]=‘0‘;
 26                 ch[i][k++]=‘1‘;
 27             }
 28         }
 29         ch[i][k]=‘\0‘;
 30     }
 31     for (int i=0;i<10;i++)
 32     {
 33 
 34         int sum=0;
 35         int len =strlen(ch[i]);
 36         for (int j=0;j<len-1;j++)
 37         {
 38             if (ch[i][j]==‘0‘&&ch[i][j+1]==‘0‘)
 39                 sum++;
 40         }
 41         //printf("%s\n",ch[i]);
 42         printf("%d\n",sum);
 43     }
 44     return 0;
 45 }
 46 */
 47 
 48 #include <stdio.h>
 49 #include <string.h>
 50 #include <math.h>
 51 #include <algorithm>
 52 using namespace std;
 53 
 54 char num[1005][500];
 55 char str[500];
 56 
 57 char *add(char s[])
 58 {
 59     memset(str,0,sizeof(str));
 60 
 61     int i;
 62     int len=strlen(s);
 63     for (i=0;i<len;i++)
 64         s[i]-=0;
 65     reverse(s,s+len);
 66 
 67     for (i=0;i<len;i++)
 68     {
 69         str[i]+=s[i]*2;
 70         if (i==0) str[i]++;
 71 
 72         if (str[i]>=10)
 73         {
 74             str[i]-=10;
 75             str[i+1]++;
 76         }
 77 
 78     }
 79     while (str[i]!=0) i++;
 80     str[i]=\0;
 81     for (int j=0;j<i;j++) str[j]+=0;
 82     for (int j=0;j<len;j++) s[j]+=0;
 83     reverse(str,str+i);
 84     reverse(s,s+len);
 85     return str;
 86 }
 87 
 88 char *de(char s[])
 89 {
 90     memset(str,0,sizeof(str));
 91 
 92     int i;
 93     int len=strlen(s);
 94     for (i=0;i<len;i++)
 95         s[i]-=0;
 96     reverse(s,s+len);
 97 
 98     int k=0,flag=0;
 99     for (i=0;i<len;i++)
100     {
101         str[i]+=s[i]*2;
102         if (str[i]>=10)
103         {
104             str[i]-=10;
105             str[i+1]++;
106         }
107 
108         if (flag==0&&str[i]==0)//减1,看这个数最后有几个 0
109         {
110             k++;
111         }
112         if (str[i]!=0) flag=1;
113 
114     }
115     while (str[i]!=0) i++;
116     str[i]=\0;
117 
118     str[k]--;
119     while (k--) str[k]=9;//减 1
120 
121     for (int j=0;j<i;j++) str[j]+=0;
122     for (int j=0;j<len;j++) s[j]+=0;
123     reverse(str,str+i);
124     reverse(s,s+len);
125     return str;
126 }
127 
128 
129 int main()
130 {
131     int n;
132     int i;
133     int xx=0;
134 
135     strcpy(num[1],"0");
136 
137     for (i=2;i<=1000;i++)
138     {
139         if (i%2==0)
140         {
141             add(num[i-1]);
142             strcpy(num[i],str);
143         }
144 
145         else
146         {
147             de(num[i-1]);
148             strcpy(num[i],str);
149         }
150     }
151     while (scanf("%d",&n)!=EOF)
152     {
153         printf("%s\n",num[n]);
154     }
155     return 0;
156 }
View Code

 

 

 

 

 

 

H - Computer Transformation(简单数学题+大数)

标签:

原文地址:http://www.cnblogs.com/haoabcd2010/p/5964978.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!