Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
解决简单密码算法难题的Java程序_Java_Cryptarithmetic Puzzle_Alphametic Question - Fatal编程技术网

解决简单密码算法难题的Java程序

解决简单密码算法难题的Java程序,java,cryptarithmetic-puzzle,alphametic-question,Java,Cryptarithmetic Puzzle,Alphametic Question,编辑:我的程序现在可以运行了,但是仍然需要对进行一些澄清,如果(400*T+40*O+4*O==1000*G+100*O+10*O+D)这是解决这个难题的关键部分。我只想完全理解节目的每一部分,谢谢 这只是为了复习,我花了几个小时试图弄明白。要么变量都是零,要么就是一个无限循环。这是一个问题,正如书中所写: “在密码算术拼图中,数学方程式是用字母书写的。每个字母可以是0到9之间的数字,但不能有两个字母相同。下面是一个示例问题: 发送+更多=钱 谜题的解决方案是S=9、R=8、O=0、M=1、Y=

编辑:我的程序现在可以运行了,但是仍然需要对
进行一些澄清,如果(400*T+40*O+4*O==1000*G+100*O+10*O+D)
这是解决这个难题的关键部分。我只想完全理解节目的每一部分,谢谢

这只是为了复习,我花了几个小时试图弄明白。要么变量都是零,要么就是一个无限循环。这是一个问题,正如书中所写:

“在密码算术拼图中,数学方程式是用字母书写的。每个字母可以是0到9之间的数字,但不能有两个字母相同。下面是一个示例问题: 发送+更多=钱 谜题的解决方案是S=9、R=8、O=0、M=1、Y=2、E=5、N=6、D=7。编写一个程序,找到以下密码算术谜题的解决方案: 太+太+太+太=好 最简单的方法是对每个唯一的字母使用嵌套循环(在本例中为T、O、G、D)。循环将系统地为每个字母分配从0到9的数字。例如,它可能首先尝试T=0,O=0,G=0,D=0,然后T=0,O=0,G=0,D=1,然后T=0,O=0,G=0,D=2等,直到T=9,O=9,G=9,D=9。在循环体中,测试每个变量是否唯一,以及方程是否满足。输出值对于满足方程式的字母。”


如您所见,我尝试将所有for循环放在while循环中以控制所有内容,这是我多次尝试修复的一次尝试。它根本不起作用,所以我把它注释掉了。

所有那些
都应该是
10

换句话说,它应该是:

for (T = 0; T < 10; T++) {
    for (O = 0; O < 10; O++) { 
        for (G = 0; G < 10; G++) {
            for (D = 0; D < 10; D++) {
                // your logic as before
            }
        }
    }
}
for(T=0;T<10;T++){
对于(O=0;O<10;O++){
对于(G=0;G<10;G++){
对于(D=0;D<10;D++){
//你的逻辑和以前一样
}
}
}
}

嗯,我是新来的,对编程一般来说都是新手。但是我也在使用绝对Java,并且刚刚解决了这个问题

我还没有运行你的代码,但只是一眼,似乎有一些问题

(或者,也许我弄错了。你自己看看。我会让你知道我在想什么。)

首先,按照您构建它的方式,它似乎不允许您发现问题的多个解决方案。当达成解决方案时,您告诉系统退出,是吗?还是我误解了

第二,如果遇到两个变量对应于同一个数字的解决方案,您告诉程序“继续”,但您没有告诉程序不要计算这些解决方案,我认为这是编程问题所要求的

第三,我甚至不知道“继续前进”到底扮演了什么角色。循环的嵌套确保——我认为——所有的可能性/排列都在编码的那个点实现/考虑,不是吗?那么布尔条件的意义是什么呢

我有可能在这一切中我都偏离了底线。我只做了三个星期的编程。但这是我的代码(对不起,太草率了)

(另外,你会看到我在那里扔了一个“计数器”来统计失败的组合/作业。但在这一点上,我也可能会感到困惑。再次,如果我的评论偏离了这里,我很抱歉。)

publicstaticvoidmain(字符串[]args){
整数计数=0;

for(int G=0;G@Dennis Meng谢谢你!这就成功了,成功地放弃了continue语句,只得到了一个空的if语句体。我犯了一个愚蠢的错误,本应该抓住,但我认为这些是对的,并在别处寻找bug。还有,有人愿意进一步解释“else if”吗(400*T+40*O+4*O==1000*G+100*O+10*O+D)“?再次感谢。这是真的。很高兴我能帮上忙。
如果(400*T+40*O+4*O==1000*G+100*O+10*O+D)
真的要看看这是否是一个解决方案。“也是”这里的意思是,
T
是百位数,
O
是十位数和一位数,给你
100*T+10*O+O
,你乘以4,因为它实际上是你想要在左手边的
TOO+TOO+TOO
,右手边也一样。
for (T = 0; T < 10; T++) {
    for (O = 0; O < 10; O++) { 
        for (G = 0; G < 10; G++) {
            for (D = 0; D < 10; D++) {
                // your logic as before
            }
        }
    }
}
public static void main(String[] args) {

int count = 0;

for (int G = 0; G <=9; G++)   
{
    for (int O = 0; O <=9; O++)
        for (int T = 0; T <=9; T++)
            for (int D = 0; D <=9; D++)

    if (((G != O) && (G != T) && (G != D) && 
            (O != T) && (O != D) && (T != D)) 
            && 
            ((400 *T) + (40 * O) + (4*O)) == 
            ((1000*G) + (100*O) + (10*O) + (1*D)))
    {
        System.out.println("G = " + G + "," + " O = " + O + "," + 
                "T = " + T + "," + "D = " + D);

    }
    else count = count +1;    
}
System.out.println(count);