解题思路:
首先要读懂题: 题目的意思是有一个串最开始就被赋值位“0”,然后对“0”进行操作,输入一个n,代表操作几次; “0”变“1” “1”变“01”
我们可以定义两个串str1 str2,一个(str1)用来作为每次遍历用的,一个(str2)作为对每一位的每一次处理之后得到的串进行暂时存储;原来串(str1)遍历完之前,都把每次遍历结果都存储到第二个串(str2)中(注意是连接存储,不是覆盖);最后把得到的新串(str2)又赋值给str1;让str1进行下一次处理;知道处理n次之后结束;n就是输入的n(表示处理几次)
注意事项:
注意更新str1是在一次遍历结束,之后再更新(即把str2赋值给str1),切记边遍历边跟新;这样就会出问题;
就是我代码中 str1 = str; 语句的位置;大家注意一下;
还有每次循环开始都应该把str2清空(即str2=“”),不然str2还保留着上一次的结果,后续的连接都是在上次基础的上连接,自然就错的一塌糊涂了;
参考代码:
#include <cstdio> #include <iostream> #include <cmath> #include <cstring> #include <string> #include <algorithm> using namespace std; int main() { string str1 = "0", str; int n; scanf("%d", &n); if(n == 0) { cout << "0" << endl; return 0; } while(n--) { str = ""; for(int i = 0; i < str1.length(); ++i) { if(str1[i] == '0') { str += "1"; } else { str += "01"; } } str1 = str; } cout << str1 << endl; return 0; }
0.0分
1 人评分