【华为OD机考python】喊7的次数重排

喊7 是一个传统的聚会游戏,N个人围成一圈,按顺时针从1到N编号。
编号为1的人从1开始喊数,下一个人喊得数字是上一个人喊得数字+1,但是当将要喊出数字7的倍数或者含有7的话,不能喊出而是要喊“过”。
假定N个人都没有失误,当喊道数字k时,可以统计每个人喊 “过"的次数。
现给定一个长度n的数组,存储打乱的每个人喊”过"的次数,请把它还原成正确顺序,即数组的第i个元素存储编号i的人喊“过“的次数。

输入为1行,空格分割的喊过的次数, 注意k并不提供,k不超过200,数字个数为n
输出为1行,顺序正确的喊过的次数  空格分割

例子
输入
0 1 0
输出
1 0 0

#coding=utf-8;
arr=list(map(int,input('喊过次数:').strip().split()))
N=len(arr) #玩游戏的人数
sum1=sum(arr) #喊7的总次数
sum_7=0 #喊7的次数
count=1 #当前喊的数字
new_arr=[] #重新排列喊7次数的数组

'''先求出喊到哪个数字停止'''
while sum_7<sum1:
    if count % 10 ==7 or count % 7 == 0:
        sum_7+=1
    else:
        pass
    count+=1

'''先给重新喊7次数的数组每个元素赋值0'''
for i in range(N):
    new_arr.append(0)

'''在喊过的数字里面找7相关的数字,找到对应喊的人,在索引上面加上1'''
for k in range(1,count):
    if k % 7 == 0 or k % 10 ==7:
        j = k % N #喊7的对应人编号
        new_arr[j-1]+=1 #索引为编号-1
    else:
        pass
print(new_arr)
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值