所以我试图解决过去奥林匹克竞赛的一个问题,你基本上采用一个字符串,即 HLOEL- 和一个数字 P=3,它输出 HELLO-,它的工作原理是将字符串的字母排序为组(行) P,然后获取每组的第一个字母,然后每组的第二个字母......一直到每组的最后一个字母。 H L O E L - --> (HE)(LL)(O-)=HELLO-
我的问题是,在我的代码中,我创建了一个变量“ix”,其中 i 位于 for 循环中,从而创建了 P 个变量,每个变量都是一个组,然后我放置另一个 for 循环,它逐列进行处理,以便输出正确的结果字符串在末尾。但它只需要第一组 (ix, i=1) 并输出该组中的字母。
请记住,我不想要一般问题的解决方案,而只是修复我的代码。
#include <iostream>
#include <iomanip>
#include <cmath>
#include <string>
using namespace std;
int main() {
int P, i, z;
string S, L;
cin >> P >> S;
for (i = 1; i <= P; i++) {
string ix = S.substr(0, P);
S.erase(0, P);
for (z = P; z >= 1; z--) {
i = P - z + 1;
cout << ix.at(P - z) <<;
}
}
}
输入: 3 HLOEL-
预期输出: 你好-
实际产量: 赫洛
虽然您的代码无法编译,但很明显您对问题的思考过多。根本不需要生成或访问子字符串。
读入初始字符串后,您只需通过几个循环对其进行迭代即可。
从索引
0
开始,打印第一个字母,然后递增 P
。现在就这样做,但从逐渐深入字符串开始。
void print_string(int p, std::string s) {
for (int i = 0; i < p; i++) {
for (int j = i; j < s.length(); j += p) {
std::cout << s[j];
}
}
std::cout << '\n';
}