我需要编写代码来找到最小整数,其剩余为:
•1除以3
•2除以5
•3除以7
我尝试了以下代码,但我的输出为1。我尝试更改初始值,但仍会输出初始值。
public static void main (String[] args)
{
int i=2;
while((i%3)!=1 && (i%5)!=2 && (i%7)!=3) {
i++;
}
System.out.print(i);
}
答案 0 :(得分:0)
您在while
循环中的条件不正确,应该是:
while((i%3)!=1 || (i%5)!=2 || (i%7)!=3)
为什么?
您需要找到第一个适用的数字:
a%3 == 1 and a%5 == 2 and a%7 == 3
为此,您需要跳过以下所有数字:
not(a%3 == 1 and a%5 == 2 and a%7 == 3)
如果您申请De Morgan's laws,则会得到:
a%3 != 1 or a%5 != 2 or a%7 != 3
答案 1 :(得分:0)
while循环中的逻辑不正确,并且由于其编写方式而很难看到问题。除了解决该问题并试图说服您正确之外,这里还采用了另一种方法,将其分解为不同的部分,因此应该更容易进行推理。它的作用是使循环稍微翻转一下:永远运行直到满足特定条件为止。
func
当我在本地运行上述代码时,它会打印出int i = 2;
while (true) {
boolean correctRemainderFor3 = (i % 3 == 1);
boolean correctRemainderFor5 = (i % 5 == 2);
boolean correctRemainderFor7 = (i % 7 == 3);
if (correctRemainderFor3 && correctRemainderFor5 && correctRemainderFor7) {
break;
} else {
i++;
}
}
System.out.print(i);
。