在一小段Java代码中将343更改为42

时间:2018-04-04 16:33:46

标签: java loops

我知道,这类问题可能被认为不适合StackOverflow的范围。如果它被投票,我将删除它,但我真的觉得它很有趣。

我发现了以下有趣的访谈任务,我仍然没有看到任何聪明/棘手的解决方案,我想知道人们会想出什么。

  

以最少的行数扩展以下代码块,使其答案始终为42。您不能使用分配(包括增量)和修改现有代码行。

public class Question {
    public static void main(String[] args) {
        int iters = 0;
        for (int i = 0; i < 7; i++) {
            for (int j = 0; j < 7; j++) {
                for(int k = 0; k < 7; k++) {
                    iters++;
                }
            } 
        }
        System.out.println(iters);
    }
}

编辑

一个建议的答案是

System.out.println(42);
System.exit(0);

这是正确的。

但是,程序应该自然结束(不用手动终止),我想,不应该直接检查iters的值我们应该测试索引:i,j,k

我的想法是添加6行:

public class Question {
    public static void main(String[] args) {
        int iters = 0;
        loopA: //added
        for (int i = 0; i < 7; i++) {
            loopB: //added
            for (int j = 0; j < 7; j++) {
                for(int k = 0; k < 7; k++) {
                    iters++;
                }
                if (j == 2) //added
                    break loopB; //added
            } 
            if (i == 1)  //added
                break loopA;  //added
        }
        System.out.println(iters);
    }
}

5 个答案:

答案 0 :(得分:2)

在递增if

之前,只需添加一个iters子句
int iters = 0;
for (int i = 0; i < 7; i++) {
    for (int j = 0; j < 7; j++) {
        for(int k = 0; k < 7; k++) {
            if (i > 0 && i == j) // Added 1 line
            iters++;
        }
    } 
}
System.out.println(iters);

答案 1 :(得分:1)

你可以跳过一些特定的迭代,因为42:

public class Question {
    public static void main(String[] args) {
        int iters = 0;
        for (int i = 0; i < 7; i++) {
            for (int j = 0; j < 7; j++) {
                if (j < 6)
                    for (int k = 0; k < 7; k++) {
                        if (k == 0)
                            iters++;
                    }
            }
        }
        System.out.println(iters);
    }
}

答案 2 :(得分:1)

不确定这是“作弊”还是“炫耀您在解析遗留代码库时学到的黑客”,但我会在此处添加:

import java.io.PrintStream;

public class Question
{
    public static void main(String[] args)
    {
        System.setOut(new PrintStream(System.out)
        {
            @Override
            public void println(int x)
            {
                System.err.println(42);
            }
        });

        int iters = 0;
        for (int i = 0; i < 7; i++)
        {
            for (int j = 0; j < 7; j++)
            {
                for (int k = 0; k < 7; k++)
                {
                    iters++;
                }
            }
        }
        System.out.println(iters);
    }
}

答案 3 :(得分:0)

这个答案会做,也不需要任何超级逻辑推理

Demo

public static void main (String[] args) throws java.lang.Exception
{
    int iters = 0;
    for (int i = 0; i < 7; i++) {
        for (int j = 0; j < 7; j++) {
            if (j == 6) break;     // <----------------------
            for(int k = 0; k < 7; k++) {
                iters++;
            }
        }
        break; // <------------------------------------------
    }
    System.out.println(iters);
}

答案 4 :(得分:-1)

我能看到的唯一方法是早点休息,不要做一个循环。

Demo

public class Question {
    public static void main(String[] args) {
        int iters = 0;
        for (int i = 0; i < 7; i++) {
            for (int j = 0; j < 7; j++) {
                if (j == 6) continue;
                for(int k = 0; k < 7; k++) {
                    iters++;
                }
            }    
            break;         
        }
        System.out.println(iters);
    }
}