如何改进此算法只使用三个循环?

时间:2016-10-25 07:26:31

标签: javascript algorithm loops typescript

我想以ABCD格式打印所有四位数字,使得A + B = C + D(称为“快乐数字”),带有三个嵌套循环。这是原始代码:

for (let a = 1; a <= 9; a++)
    for (let b = 0; b <= 9; b++)
        for (let c = 0; c <= 9; c++)
            for (let d = 0; d <= 9; d++)
                if (a + b == c + d)
                    console.log('${a}${b}${c}${d}');

我尝试这样做:

for (let a = 1; a <= 9; a++)
    for (let b = 0; b <= 9; b++)
        for (let c = 0,d=0; c <= 9,d <= 9; c++,d++)
            if (a + b == c + d)
                console.log('${a}${b}${c}${d}');

但是控制台没有打印所有“快乐号码”。第一个是:9687,9696,9779,第二个:7144,7355。我的错误在哪里?

3 个答案:

答案 0 :(得分:1)

for (let a = 1; a <= 9; a++)
    for (let b = 0; b <= 9; b++)
        for (let c = 0; c <= 9; c++) {
            const d = a + b - c;
            if (d >= 0 && d <= 9) console.log(`${a}${b}${c}${d}`);
        }
拥有dab后,

c是唯一的,因此您只需要计算它。

答案 1 :(得分:0)

错误在于:

for (let c = 0,d=0; c <= 9,d <= 9; c++,d++)

使用此代码,c和d将在同一时间递增。所以你的第二个代码只会打印最后2位数字相同的快乐数字(如7144和7355)。

我不明白你为什么要使用3个循环...你可以在一个循环中轻松完成这个:

for(let i = 1000; i < 10000; i++)
{
   if(/* test if i is happy here */)
        console.log(i);
}

答案 2 :(得分:0)

在一个循环中.....

customer.order*.orderNumber

如果你坚持3循环:

for (int i=1001;i<=9999;i++){
if(i/1000+(i/100)%10 == (i/10)%10+i%10)System.out.println("happy Number"+i);
    }