写完了才想起用字符串判断,我这是一点点算的,很笨,但还算详细。(菜鸡成长日记)
list = [0,0,0,0] #用于存放甲、乙、丙、丁的跳过次数
m = 0 #后面用于判断停止位置
def addone(): #定义“加一”函数,每次跳过给相应的人跳过数加一
j = i % 4 #判断跳过的人是谁
list[j-1] += 1 #因为列表序列从零开始,所以j要减一
n = int(input())
for i in range(n*10): #因为报20个数的时候丁报到了24,不知道报n个数要报到哪,所以乘了个十保证覆盖所有数据,可替换,足够大就行
if m == n: #上一行乘了十,所以本行判断一下停止位置,后面有m++,m加到等于n的时候,就已经报出了n个数,终止循环。(结合下面m+=1那行注释)
break
i += 1 #range第一个数是零,报数从一开始,所以加个一
if i % 7 == 0: #判断是不是7的倍数
addone()
else:
if 700<i<800: #700到799都跳过
addone()
else:
i %= 100 #除了700-799,大于一百的数据都把百位去掉再处理
if i % 10 == 7: #判断个位是7的数
addone()
elif i // 7 == 10: #判断十位是7的数
addone()
elif i == 78: #上一条不能判断78和79,单独列出来
addone()
elif i == 79:
addone()
else:
m += 1 ##每个没跳过的数,也就是成功报出的数都使m+1,加到和n一样就报出了n个数,终止。
print(list[0])
print(list[1])
print(list[2])
print(list[3])