【发布时间】:2014-09-01 06:37:41
【问题描述】:
我正在尝试使用 c++ 解决以下数学问题:
(Each letter represents an individual digit)
WHITE
+ WATER
-------
PICNIC
到目前为止,我有这个代码来解决这个难题:
#include <iostream>
using namespace std;
int main(int argc, char **argv) {
for (int w = 5; w < 10; w++) {
for (int h = 0; h < 10; h++) {
for (int i = 0; i < 10; i++) {
for (int t = 0; t < 10; t++) {
for (int e = 0; e < 10; e++) {
for (int a = 0; a < 10; a++) {
for (int r = 0; r < 10; r++) {
for (int p = 0; p < 10; p++) {
for (int c = 0; c < 10; c++) {
for (int n = 0; n < 10; n++) {
// I need to check if all the digits are different here
if (10000 * w + 1000 * h + 100 * i + 10 * t + e + 10000 * w + 1000 * a + 100 * t + 10 * e + r == 100000 * p + 10000 * i + 1000 * c + 100 * n + 10 * i + c) {
cout << "W: " << w << endl;
cout << "H: " << h << endl;
cout << "I: " << i << endl;
cout << "T: " << t << endl;
cout << "E: " << e << endl;
cout << "A: " << a << endl;
cout << "R: " << r << endl;
cout << "P: " << p << endl;
cout << "C: " << c << endl;
cout << "N: " << n << endl;
}
}
}
}
}
}
}
}
}
}
}
}
我可以运行一些快速测试来检查所有数字是否不同(有 10 个不同的字母,所以一个必须是 0,一个必须是 1,等等)
编辑:
我尝试将它们相加并检查是否等于 45。我可以编写另一个程序/方法在嵌套循环完成后清除结果,但有没有更好的方法?
【问题讨论】:
-
将每个字符添加到
std::set,并检查下一个字符是否已存在于集合中。 -
@NeilKirk 这速度够快吗?因为会有大量可能的迭代,我不希望它永远持续下去。
-
@NeilKirk:这回答了标题中提出的问题,但是如果您阅读问题正文中的代码,它甚至根本不会做任何事情。
-
@Puppy:那是因为他不知道怎么做,所以他还没有写那段代码。
-
将它们全部加起来,看看它们是否加到 45。虽然不完美,但会清除大部分误报,剩下的你可以看一下。
标签: c++ conditional-statements