我确信这只是我真的很愚蠢,但我正在编写的程序显示出我无法理解的行为。程序会查找一个可被1到10之间的所有数字整除的数字(这是Project Euler解决方案的前身)。
我的代码有效 - 这里是Python:
for i in range( 1, 10000 ):
check = 1
for j in range( 2, 10 ):
if i % j == 0:
continue
else:
check = 0
break
if check == 1:
print i
break
它正确找到最低的这个数字是2520.我希望它更高效,我想如果你只是看它是否可以被6到10的数字整除,你就会测试同样的东西。
但是,请将其更改为
for j in range( 6, 10 )
然后它返回504!我用C ++和Python编写了它们,它们都做同样的事情 - 我真的不明白!它显然是错误的 - 它显然甚至不能被10整除!
我无法理解为什么我的代码在更改时会突然停止工作。我特别不明白为什么测试6到10范围内的倍数在逻辑上不等于2到10的范围。
对于那些更偏向于c ++的人:
#include <iostream>
using namespace std;
int main(){
for( int i = 1; i < 10000; i++ ){
int check = 1;
for( int j = 6; j < 10; j++ ){
if( i % j == 0 ){
continue;
} else {
check = 0;
break;
}
}
if( check == 1 ){
cout << i << endl;
break;
}
}
}
答案 0 :(得分:2)
你的问题是range( 6, 10 )
表示从6开始的所有数字,包括但不包括10.所以只有数字6,7,8,9。
range( 2, 10 )
有效,因为它包含5个,连同其他包含的数字,如6或8,要求它由2设计,所以你实际得到(隐式)检查是否可以通过其中包括10,即使10不是range(2, 10)
的一部分。
你可以写range(5, 10)
或range(6, 11)
,它应该有效。
答案 1 :(得分:1)
您缺少5
。
range9(1,10) == [1, 2, 3, 4, 5, 6, 7, 8, 9]
range9(6,10) == [6, 7, 8, 9]