Cryptarithmetic puzzle 简单密码难题
我正在寻找一种方法来解决这个密码算法问题:Cryptarithmetic puzzle 简单密码难题,cryptarithmetic-puzzle,Cryptarithmetic Puzzle,我正在寻找一种方法来解决这个密码算法问题: ROBERT + GERALD = DONALD 还有其他一些,每个字母代表一个数字 您将如何着手手动解决此问题,以及这与以编程方式解决此问题有何关系 提前谢谢你你可以算出一个总数: robert + gerald ------ = donald 并运用基本的数学知识 例如,右列(6)中没有进位,我们有T+D=D。这意味着T必须为零 同样,对于第5列,第6列没有进位,R+L=L表示R也为零,第4列也没有进位 与第4列相同,E+A=A因此
ROBERT + GERALD = DONALD
还有其他一些,每个字母代表一个数字
您将如何着手手动解决此问题,以及这与以编程方式解决此问题有何关系
提前谢谢你你可以算出一个总数:
robert
+ gerald
------
= donald
并运用基本的数学知识
例如,右列(6)中没有进位,我们有T+D=D
。这意味着T
必须为零
同样,对于第5列,第6列没有进位,R+L=L
表示R
也为零,第4列也没有进位
与第4列相同,E+A=A
因此E
为零
因此,我们现在有:
0ob000
+ g00ald
------
= donald
从这里,我们可以从第3列和第1列中推断出b==n
和g==d
,它们(连同o/a/l/d
)可以是任何值,因为每个数字都被加为零,所以不可能带任何位置。所以,让我们把它们都变成一个:
011000
+ 100111
------
= 111111
事实上,您可以将它们全部设为零,最终得到000000+000000=000000
但这几乎与编程无关,所以让我们这样做:
#include <stdio.h>
int main (void) {
int robert, gerald, donald;
for (int r = 0; r < 10; r++) {
for (int o = 0; o < 10; o++) {
for (int b = 0; b < 10; b++) {
for (int e = 0; e < 10; e++) {
for (int t = 0; t < 10; t++) {
for (int g = 0; g < 10; g++) {
for (int a = 0; a < 10; a++) {
for (int l = 0; l < 10; l++) {
for (int d = 0; d < 10; d++) {
for (int n = 0; n < 10; n++) {
robert = r * 100000 + o * 10000 + b * 1000 + e * 100 + r * 10 + t;
gerald = g * 100000 + e * 10000 + r * 1000 + a * 100 + l * 10 + d;
donald = d * 100000 + o * 10000 + n * 1000 + a * 100 + l * 10 + d;
if (robert + gerald == donald) {
printf (" %06d\n", robert);
printf ("+ %06d\n", gerald);
printf (" ------\n");
printf ("= %06d\n", donald);
printf ("........\n");
}
}
}
}
}
}
}
}
}
}
}
return 0;
}
它没有输出解决方案
现在,这是一个不同的问题,但您只需稍微修改上面的代码,将if
语句改为:
if (donald + gerald == robert) {
printf (" %06d\n", donald);
printf ("+ %06d\n", gerald);
printf (" ------\n");
printf ("= %06d\n", robert);
printf ("........\n");
}
您可以得到单一的解决方案:
526485
+ 197485
------
= 723970
它更适合于数学se站点,因为这是一个简单的密码谜题。。不管怎么说,看看这个好!(+1)我想说的是,那些嵌套的for循环只需要一个接收函数,它也可以解决任何问题。《新科学家》杂志每周都有一个谜。我经常用它来保持我的注意力集中,找出用程序解决问题的最佳方法。代码往往是一次性的,所以我不太担心可重用性:-)谢谢,这肯定消除了我所有的疑虑。
526485
+ 197485
------
= 723970