正在重置编号java



所以我在java中遇到了一个问题,要确定谁是最后一个得到糖果的孩子,n是有多少孩子,m是有多少糖果,s是得到第一个糖果的孩子的数量。所以基本上,如果n=4,m=6,s=2,答案是3,因为所有的都是从2开始的(得到第一块糖果的孩子的数量(->3->4并且重新启动到1->2->3和3是最后一个得到糖果的孩子。代码运行得很好,但我在n=3333、m=3333和s=1 时遇到了错误

public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int m = in.nextInt();
int s = in.nextInt();
int total = m%n;
int jaw = total+s-1;
System.out.print(jaw);


}

我假设;bug";你提到的是jaw是0,对吧?这是因为3333%3333将是0,因此0 + s - 1也将是0(0+1-1=0(。

你走在了正确的轨道上,即m % n会告诉你在每个人都得到公平/平等的份额后还剩多少块糖果。

现在您只需分发";休息";(total(,这意味着你";添加";将其设置为";第一个孩子";(s(。假设这是c = s + total,那么c是最后一个得到任何东西的孩子。你减去-1是因为如果你加上任何东西;光标";前进到下一个孩子,因此您要追溯。

然而,如果你没有任何东西可以分发呢?然后最后一个得到任何东西的孩子是第一个孩子之前的,如果是4个孩子,从1开始,则是第四个。你的计算结果为0,基本上可以表达这一点。

您的代码可能面临的另一个问题是,如果您从最后一个孩子(比如4(开始,并有2块糖果要分发,那么您将得到"0";第5";child而不是";第一个";成为最后一个得到东西的人:2 + 4 - 1 = 5

那么你该如何解决呢?

  • 添加CCD_;溢出";(如果你从最后一个孩子开始,再分发两块糖果,第一个就会得到(
  • 检查是否为jaw == 0,在这种情况下,解决方案为jaw = n(最后一个孩子得到最后一块糖果(

问题是你到达了不存在的人0。3333%3333=0则0+1-1=0当我们在循环中时,0是上一轮的最后一个人,即人数m。我们解决这个问题的方法是,如果结果为零,我们返回m。

import java.util.Scanner;
class sweets {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int m = in.nextInt();
int s = in.nextInt();
int total = m%n;
int jaw = total+s-1;
if(jaw == 0){
jaw = m;
}
System.out.print(jaw);
}
}

无论何时m%n==0,您都需要考虑。

在这种情况下,jaw=n-s+1;

只需要添加一个if语句就可以包含它。

最新更新