我想为一个数字创建一个java程序,当除以2,3,4,5,6时,剩下的1除外,它完全除以7。 我试过这个逻辑
for (int a=1;a<=500;a++){
if (a%2==1 && a%3==1 && a%4==1 && a%5==1 && a%6==1 && a%7==0)
它工作正常,但我希望通过这个逻辑
for (int a=1;a<=500;a++){
for(int b=2;b<=6; b++){
if (a%b==1 && a%7==0){
System.out.println(a);
如果有可能以这种方式创建,请帮助我吗?谢谢
答案 0 :(得分:1)
您可以计算多少次迭代通过测试,如下所示:
for (int a=1; a<=500; a++) {
int flag=0;
for (int b=2; b<=6; b++) {
if (a%b == 1) {
flag += 1;
} else {
break;
}
}
if (flag == 5) {
if (a%7 == 0) {
System.out.println("Value "+a);
}
}
}
如果任何测试失败,flag
将在循环结束时小于5。如果您更改了测试次数,则需要记住更新该幻数。
答案 1 :(得分:0)
你可以命名外部循环并检查并在内部循环中继续它,如下所示:
public static void main(String[]args){
// That´s your mainloop
mainLoop: for (int a=1; a<=500; a++){
for(int b=2; b<7;++b) {
// If anything doesn´t leave a remainder of 1 youll continue with the mainloop here
if(a%b != 1) {
continue mainLoop;
}
}
// 2-6 had a remainder of 1, so just check if the number is dividible by 7 now, if so print it.
if(a%7 ==0) {
System.out.println(a);
}
}
}
答案 2 :(得分:0)
如果将代码拆分为函数,它可以使事情变得更容易。从外部(a
)循环开始:
public static void main(String[] args)
{
for (int a = 1; a <= 5000; ++a)
if (test(a))
System.out.println(a);
}
我们已将实际逻辑推迟到test()
函数,并假设我们稍后会定义。
现在编写测试。只要任何子测试失败,我们就可以立即返回false。如果所有测试都通过并且我们到达终点,那么我们必须返回true:
static boolean test(int x)
{
// i is the candidate factor
for (int i = 2; i <= 7; ++i) {
int expected = i==7 ? 0 : 1;
if (x%i != expected)
return false;
}
return true;
}
我们可以通过使用幻数来进一步简化以编码expected
:
static boolean test(int x)
{
for (int i = 2; i <= 7; ++i)
if (x%i != 301%i)
return false;
return true;
}
答案 3 :(得分:-1)
您可以迭代所有b
值,并在其中任何一个测试失败时设置标志。如果在循环结束时未设置该标志,则表示它们都已通过:
for (int a=1; a<=500; a++) {
int flag = 0;
for (int b=2; b<=6; b++) {
if (a%b!=1 || a%7!=0) {
// doesn't satisfy the condition, so flag it
flag = 1;
break; // exit the inner loop
}
}
if (flag == 0)
// If we got here without setting flag, it means that all of the
// 'b' values passed the test.
System.out.println(a);
}