【问题标题】:I made some code for homework, but I don't believe it works. It's code for the Josephus problem我为家庭作业编写了一些代码,但我不相信它有效。这是约瑟夫斯问题的代码
【发布时间】: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


【解决方案1】:

感谢大家,特别是 JB Nizet 帮助我更好地写出我的问题。我弄清楚了为什么我的代码不起作用。当我说它可能在设计上存在缺陷时,我是对的。当我写在纸上时,我算错了,并根据一个缺陷创建了我的公式。

基本上,我写了 1,2,4,7。并假设这对序列的其余部分是正确的。我数错了。它应该是 1,2,4,8。换句话说,是 2 的倍数。 这是新代码。

//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;
        while (num4 > reducer){
            num4 -= reducer;
            reducer *= 2;
        }
        num4 = 1 + (num4-1)*2;
        MyConsole.printPrompt("The Safe spot for the entered number is " + Integer.toString(num4));

【讨论】:

    猜你喜欢
    • 2022-11-17
    • 1970-01-01
    • 1970-01-01
    • 2022-06-30
    • 1970-01-01
    • 1970-01-01
    • 2018-06-02
    • 2016-05-01
    • 1970-01-01
    相关资源
    最近更新 更多