我正在学习编程,我遇到了看和说序列.我尝试用c ++编写代码
I am learning programming, I came across Look and Say sequence.I tried to code it in c++
您能否建议我如何降低此代码的复杂性。这是我用 c++ 编写的代码。这个问题可能有算法,但我想提高我的编码技能。谢谢。
这是我尝试生成的序列。例如:1, 11, 21, 1211, 111221, ...
1读为"一个 1"或 11。
11 读作"两个 1"或 21。
21 读为"一个 2,然后是一个 1"或 1211在这里,函数 countAndSay 获取要生成的整数或第 n 个数字,并返回一个字符串,显示生成的第 n 个序列。
#include "string"
#include "iostream"
#include "unordered_map"
using namespace std;
string countAndSay(int n) {
if (n == 1)
return "1";
int j;
string s = "1";
string temp = "";
unordered_map<char, int> dict;
for (int i = 1; i<n; i++) {
for (j = 0; j<s.length(); ++j) {
if (dict.find(s[j]) == dict.end() && j == 0)
dict[s[j]] = 1;
else if (dict.find(s[j]) == dict.end()) {
temp += to_string(dict[s[j - 1]]);
temp += s[j - 1];
dict.clear();
dict[s[j]] = 1;
}
else
dict[s[j]] += 1;
}
temp += to_string(dict[s[j - 1]]);
temp += s[j - 1];
dict.clear();
s = temp;
temp = "";
}
return s;
}
int main()
{
String s=countAndSay(3);
cout<<s;
return 0;
}
读取数字并将其存储在数组或字符串中。 循环遍历并检查当前元素是否与上一个元素相同(基于 0 索引,从 1 开始并检查 arr[i] == arr[i-1]),然后增加计数器或打印带计数器的 [i-1] 元素并将计数器重置为 1。
相关文章:
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 代码在main()中运行,但在函数中出现错误
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 编译包含字符串的代码时遇到问题
- 我是 c++ 的新手.学习基本知识后,我想做井字游戏.对于印刷板,我在下面写代码,但它显示错误
- 预期';' - 我从学习资源复制了此代码,但它不起作用
- 学习左值和右值,但不确定为什么这个代码有效
- 我正在学习编程,我遇到了看和说序列.我尝试用c ++编写代码
- 学习C++..编译器在某一点意外地重复执行代码
- 代码-帮助学习ear
- 我正在尝试学习如何正确分离类标头和代码
- 编译来自学习现代 3D 图形编程的失败代码 函数___tmainCRTStartup中引用未解析的外部符号_main
- DirectX 9、10、11 用于学习的代码差异
- 学习指针C++使用以下代码进入核心转储,我真的不知道为什么?
- C++模板,第一次学习,这个代码有什么问题
- MS Visual C++2010学习版继续运行旧代码
- 有人能解释这个代码与结构吗?(尝试学习Winsock 2)
- 如何学习c++代码和生成的汇编代码之间的链接
- 机器学习代码dlib与高维标签
- 如何使此代码更快(学习最佳实践)