咖啡


私信TA

用户名:Tianxn

访问量:88155

签 名:

十年OI一场空,不开LL见祖宗。

等  级
排  名 7
经  验 20311
参赛次数 9
文章发表 197
年  龄 22
在职情况 学生
学  校 西安航空学院
专  业 软件工程

  自我简介:

解题思路:


首先要读懂题: 题目的意思是有一个串最开始就被赋值位“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 人评分

  评论区