本帖最后由 昨非 于 2021-1-5 13:10 编辑
这是小甲鱼答案的解释:x = 7
i = 1
flag = 0
while i <= 100: #循环变量是i,因为题目要找满足条件的最小x值,所以这里写成i<=1000000也是一样的结果,这个100不用思考为什么
if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5):
flag = 1
else:
x = 7 * (i+1) #x是7的整数倍所以七个七个的跳着取值,之所以这么写,是为了减少一个一个比较的运算量(提高执行速度)
i += 1
#当i=17时,x=119,刚好是满足题目的最小值,此次循环中,执行if,标识符flag变为1,else不执行,所以之后的x值不变,一直为119
#下次循环:i+=1,只执行if,x不变,直到i>100,跳出循环
if flag == 1: #根据标实符flag打印结果(仍为119)
print('阶梯数是:', x)
else:
print('在程序限定的范围内找不到答案!')
你的答案:x = 7
a= 1
while a == 1:
if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5) and(x%7==0):
print(x)
a = 2
else:
x = x + 1
#你的答案里,x本身是循环变量,循环条件由a的值来控制,答案是对的,只不过因为是一格一格比较的,运算次数是小甲鱼答案的七倍,
# 当然,程序简单,这点儿差异根本察觉不到
如果不限制只输出最小值的话,可以这么改:x = 7
while 1: #死循环 (就不必用a来判断了)
if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5) and(x%7==0):
print(x)
x = x + 1 #不必加else分支,直接写在while循环里,缩进与if平级作为循环变量即可
if x>1000: #避免死循环,只输出前1000以内的符合条件的值
break
测试结果为(1000以内): |