我知道,这类问题可能被认为不适合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);
}
}
答案 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)
这个答案会做,也不需要任何超级逻辑推理
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)
我能看到的唯一方法是早点休息,不要做一个循环。
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);
}
}