学习C++从娃娃抓起!记录下在学而思小猴编程学习过程中的题目,记录每一个瞬间。侵权即删,谢谢支持!
附上汇总贴:小猴编程C++ | 汇总-CSDN博客
【题目描述】
给定一个只包含数字字符的字符串
s
s
s 和一个正整数
k
k
k。
如果字符串
s
s
s的长度大于
k
k
k,则需要执行以下操作:
- 将字符串拆分成长度为 k k k 的若干个连续子串,使得前 k k k 个字符都分在第一个子串中,接下来的 k k k 个字符都分在第二个子串中,依次类推。最后一个子串的长度可以小于 k k k;
- 用第 1 1 1 步拆分出的每个子串中的所有数字之和替换对应的子串。例如,“ 346 346 346” 会被替换为 “ 13 13 13”,因为 3 + 4 + 6 = 13 3+4+6=13 3+4+6=13。
- 按照从左到右的顺序合并所有子串得到一个新的字符串,如果新字符串的长度大于 k k k 则重复第一步。
如果字符串
s
s
s的长度不大于
k
k
k,则不需要执行任何操作。
【输入】
第一行,包含一个字符串
s
s
s,保证
s
s
s中只包含数字字符;
第二行,包含一个整数
k
k
k。
【输出】
一行一个字符串,表示原字符串的最终结果。
【输入样例】
11111222223
3
【输出样例】
135
【代码详解】
#include <bits/stdc++.h>
using namespace std;
string fun(string s, int k)
{
while (s.size()>k) { // 当字符串长度大于k
string t = "";
int num = 0;
for (int i=0; i<s.size(); i++) { // 遍历字符串长度
num += s[i] -'0'; // 每一位转为数字,并加到num中
if (i%k==k-1 || i+1==s.size()) { // 当遍历到k个长度,或者遍历到最后一个字符时
t += to_string(num); // 就将累加的num转成字符串,输入到t中
num = 0; // 并重新开始计算num
}
}
s = t; // 遍历一轮后,将t复制给s,重新开始直至s的长度小于等于k
}
return s; // 返回合并后的字符串
}
int main()
{
string s;
int k;
cin >> s >> k; // 输入字符串s和长度k
cout << fun(s, k) << endl; // 输出结果
return 0;
}
【运行结果】
11111222223
3
135