5 条题解
-
1
这道题稍微有一点点坑
:
#include <bits/stdc++.h> using namespace std; int sum; int main() { ios::sync_with_stdio(false); // 读入加速 cin.tie(0); cout.tie(0); string s, ans = ""; // s如题目中所述,ans是最后的答案 cin >> s; // 输入 char c = s[0]; // 挑一个基准字符,用来判断有几个连续 for (int i = 0; i <= s.size(); i++) /* 这里之所以要写成i <= s.size();,而不写成i < s.size() 是因为当判断到最后一个字母时,我的程序只能判断到倒数第二个相同的字符 最后一个是一直等于的,不管是一个还是两个及以上都不会执行到s[i] != c这一句 毕竟,循环结束后,最后一个字符后面已经没有字符了,所以它只有相同的 */ { if (s[i] != c) // 如果不相同,说明需要加入答案 (sum == 1) ? ans += c : ans += to_string(sum) + c, sum = 1, c = s[i]; // 三目运算符,如果只有1个字符,那sum就不用记录,否则,就要现加sum,再加当前字符 // to_string是用来将数字转换成字符穿,用法:to_string(需要转换的int型变量名) else sum++; // 如果是一样的,计数器++ } cout << ans << endl; // 输出答案 return 0; // 好习惯 }
-
0
编写成功,f[i]十分重要,它来控制是否输出
AC代码!!!AC代码!!!
#include <bits/stdc++.h> using namespace std; int y; int main() { string s; getline(cin,s); bool f[s.size()]; for (int i = 0;i < s.size();i++) { f[i] = true; } for (int i = 0;i < s.size();i++) { if (f[i]) { y = 1; for (int j = i + 1;j < s.size();j++) { if (s[j] == s[i]) { y++; f[j] = false; } else { break; } } if (y > 1) cout << y; cout << s[i]; } } }
-
0
#include <iostream> #include <string> using namespace std; int main() { string a; getline(cin, a); int num = 1;//当一个字母出现时它至少会出现一次 for (int i = 0; i < a.size(); i++) { if (a[i] == a[i + 1]) { num++; } if (a[i] != a[i + 1])//当前后不相等时证明相同字母已经结束,开始结算 { if (num != 1)//如果不分成num==1和num!=1的情况下,aabbbx会变成2a3b1x,而这个1是我们不想要的 { cout << num; cout << a[i]; num = 1; } else { cout << a[i]; } } } return 0; }
-
-3
写题解请注意
鼓励大家写题解,但注意题解格式。
题解一定要有思路解析或代码注释,能否让别人理解你的思路
也是你的能力的检验,不要只放无意义的代码给大家复制,那就失去了做题的初心。
给代码两端加上这个会舒服一些
```cpp
你的代码
```
</span>
这个点在键盘的左上角tab上面那个键,注意切换输入法
#include<iostream> using namespace std; int main() { int n; cin>>n;//这是一个注释 return 0; }
请注意严禁抄袭题解,写题解不要只放代码,需加上你的思路或代码注释。
抄袭题解一经发现直接取消成绩。
题解被删除的可能
- 代码不符合格式规范
- 没有思路讲解或者没有注释,
- 无意义的题解
大家携手共同维护一个良好的编程环境,如果一经发现,多次作乱。可能会被管理员拉黑,请注意,一旦拉黑即失去登陆资格。
- 1
信息
- ID
- 103
- 时间
- 1000ms
- 内存
- 32MiB
- 难度
- 1
- 标签
- 递交数
- 92
- 已通过
- 64
- 上传者