Constraints
Time Limit: 1 secs, Memory Limit: 32 MB
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
题目分析:简单题一道,但是由于数据量有点儿大,所以,用字符串来存储结果。
就是一道寻找规律的题目。
当n % 2== 0; a[n] = 2 * a[n - 1] + 1
当 n % 2 != 0; a[n] = 2 * a[n - 1] - 1
参考代码:
#include <iostream>
#include <string>
#include <stack>
using namespace std;
string myfunc(string str, int key)
{
int len = str.size();
stack<int> s;
int inc;
if (key == 1)
inc = 1;
else
inc = -1;
int sum;
for (int i = len - 1; i >= 0; -- i)
{
sum = (str[i] - '0') * 2 + inc;
s.push(sum % 10);
inc = sum / 10;
}
if (inc != 0)
{
s.push(inc);
}
string mystr;
while (!s.empty())
{
char ant = s.top() + '0';
s.pop();
mystr = mystr + ant;
}
return mystr;
}
int main()
{
string str[1009];
str[0] = "0";
str[1] = "0";
str[2] = "1";
str[3] = "1";
for (int i = 4; i <= 1000; ++ i)
{
if (i % 2 == 0)
{
str[i] = myfunc(str[i - 1], 1);
}
else
{
str[i] = myfunc(str[i - 1], -1);
}
}
int n;
while (cin >> n)
{
cout << str[n] << endl;
}
//system("pause");
}