【发布时间】:2019-11-30 18:08:58
【问题描述】:
这里是我需要做作业的问题的规则:
n 个人围成一圈。从第一个人开始,每第二个人被处决。重复此过程,直到最后一个人还活着,然后我们返回他在圈子中的位置。
例如,对于:
- n = 1, 1 是最后一个人。
- n = 2, 1 是最后一个人。
- n = 3, 3 是最后一个人。
- n = 4, 1 是最后一个人。
- n = 5, 3 是最后一个人。
- n = 6, 5 是最后一个人。 这是Wikipedia页面的链接,以防我解释错了。
这是我的 Java 代码问题。
//Question 4
int num4 = MyConsole.readInt("Please enter a Number(integer) of people which you want me to test what is the safe spot in a Josephus problem: ");
int reducer = 1;
int c = 1;
while (num4 > reducer+1){
num4 -= reducer;
reducer += c++;
}
num4 = 1 + (num4-1)*2;
MyConsole.printPrompt("The Safe spot for the entered number is " + Integer.toString(num4));
据我所知,此代码未按预期工作。 对于输入 1 到 15,它似乎按预期工作。但是在输入 16 时,我得到了答案 3,而它应该是 1。据我所知,之后的所有答案都变得不正确。 你能告诉我代码有什么问题吗?
如果可能,我想使用此代码,因为它用于家庭作业,因此原创作品比更好/更高效的代码更有价值。这就是为什么我不想使用,例如,位移解决方案。我自己也没想到。
【问题讨论】:
-
好吧,编译并运行您的代码,并测试它是否正确。它甚至不编译,所以不,它不起作用。
-
好的,等一下。我发错了。我会发布原件(我编辑它是因为我使用了老师给班级的一个名为 MyConsole.java 的类。它最初不是在函数中)。
-
多花一点时间。使用各种输入自行编译和运行代码,并检查您得到的输出是否是预期的。不需要问我们,至少在你这样做之前不需要。
-
就是这样,我已经做到了。它并不适用于我所做的所有答案。据我所知(除非我犯了错误)它可以正常工作,直到 20 岁。它返回一个不正确的答案。
-
然后改变你的问题,然后问那个。你的问题应该表述为:“我试图解决约瑟夫斯问题。这就是约瑟夫斯问题:。我已经用 1 到 20 的输入进行了测试,输出是什么我预料到了。但是,对于输入 X、Y 和 Z,我得到 A、B 和 C 作为输出,而不是 D、E 和 F。你能解释一下我的代码有什么问题吗?"
标签: java optimization