前言
此题的解决方法不唯一,你可以参考一下对应的解题思路,建议不要直接复制黏贴代码。
一、题目
二、算法思想
- 大致的题意是说从
1
开始计数,一遇到7
的倍数或数字中含有7
时,就跳过这个数- 直到成功计数的个数达到
n
个为止- 而我们需要统计输出的是玩这个计数游戏的甲乙丙丁四人遇到
“跳过数”
的次数
,并输出四人的结果。
- 我使用的存储结构是字典,以四个人的中文名称作为对应的键,并初始化值为0
- 并定义了两个变量,一个是当前报的数,一个是当前报数的人名。
- 先创建了一个函数,用于判断一个数是否含有
7
或为7
的倍数python
中可以使用in
方法来判断一个字符存在于另一个字符串中,所以可以直接使用if ’7’ in str(number)
来判断转换为字符串后的number
中是否含有数字7
。
- 使用死循环进行计数,当成功计数达到
n
个就break
出去- 符合“跳过数”时就统计一下
- 因为遇到“跳过数”时不能算到成功计数个数里,所以需要自减运算与后面的自加运算进行抵消。
- 之后就是将当前玩家跳到下一玩家,当前数加
1
,成功计数个数加1
。
三、代码
# coding=utf-8
#作者:小狐狸
#题目:报数
def check_seven(number):
'''
查看输入的数是否含有7或7的倍数,number为int类型
是返回True,否返回False
'''
if number%7==0:
return True
if '7' in str(number):
return True
return False
if __name__ == "__main__":
n = int(input())
## print(n)
dic = {}
dic['甲'] = 0
dic['乙'] = 0
dic['丙'] = 0
dic['丁'] = 0
now = 1 #当前的数
now_player = '甲' #当前报数的玩家
number = 0 #已报的个数
while True:
if number==n: #报了n次结束
break
if check_seven(now): #若当前玩家的数符合跳过数的条件时
dic[now_player] += 1
number -= 1 #与之后的次数累加消除
#跳到下一玩家
if now_player == '甲':
now_player = '乙'
## print('甲',now)
elif now_player == '乙':
now_player = '丙'
## print('乙',now)
elif now_player == '丙':
now_player = '丁'
## print('丙',now)
elif now_player == '丁':
now_player = '甲'
## print('丁',now)
now += 1
number += 1
print(dic['甲'])
print(dic['乙'])
print(dic['丙'])
print(dic['丁'])