【发布时间】:2019-10-20 04:39:37
【问题描述】:
我正在尝试解决 Google Kickstart 2018 第 A 轮中的 Scrambled Words 问题。
我无法生成输入字符串。这是他们给的方向
第三行包含两个小写英文字母S1和S2,和 五个整数 N、A、B、C 和 D。S1 和 S2 是前两个字符 教授的字符串 S 的长度,N 是 S 的长度,其他四个 整数是您应该用来生成字符的参数 S,如下:
首先我们将 ord(c) 定义为字符 c 的十进制值,然后 char(n) 作为十进制 n 的字符值。例如,ord('a') = 97 和 char(97) = 'a'。其他可以参考 ASCII 表 转化率。
现在,定义 x1 = ord(S1), x2 = ord(S2 )。然后,使用下面的递归 为 i = 3 到 N 生成 xi:
- xi = ( A * xi-1 + B * xi-2 + C ) 模 D.
我们定义 Si = char(97 + ( xi modulo 26 )),对于所有 i = 3 到 N。
使用这些方向进行测试输入,
1
5
axpaj apxaj dnrbt pjxdn abd
a a 50 1 1 1 30
我生成的字符串是
aapaapaapaapaapaapaapaapaapaapaapaapaapaapaapaapaa
但是应该生成的字符串是
aapxjdnrbtvldptfzbbdbbzxtndrvjblnzjfpvhdhhpxjdnrbt
这是我的代码
char S1, S2;
long N, A, B, C, D;
cin >> S1 >> S2 >> N >> A >> B >> C >> D;
A %= D;
B %= D;
C %= D;
vector<char> S;
S.push_back(S1);
S.push_back(S2);
for (int i = 2; i < N; i++) {
long xi1 = (long)S[i - 1];
long xi2 = (long)S[i - 2];
long xi = (A * xi1) % D;
xi += ((B * xi2) % D);
xi += C;
xi %= D;
xi %= 26;
char Si = (char)(97 + xi);
S.push_back(Si);
}
【问题讨论】:
-
如果您尝试使用
std::cin >> some_std_string阅读axpaj apxaj dnrbt pjxdn abd,那将无法正常工作。它只会读取axpaj然后停止。您需要使用getline()。 -
我事先单独阅读了这些内容,没有任何错误。我使用循环读取每个单词,因为单词的数量是给我们的。