华为OD机试-喊7游戏-创新互联

创新互联作为成都网站建设公司,专注成都网站建设、网站设计,有关成都定制网页设计方案、改版、费用等问题,行业涉及酒楼设计等多个领域,已为上千家企业服务,得到了客户的尊重与认可。题目描述

喊7 是一个传统的聚会游戏,N个人围成一圈,按顺时针从1-7编号
编号为1的人从1开始喊数,下一个人喊得数字是上一个人喊得数字+1
但是当将要喊出数字7的倍数或者含有7的话,不能喊出 而是要喊过

假定N个人都没有失误。当喊道数字k时,可以统计每个人喊 “过"的次数

现给定一个长度n的数组,存储打乱的每个人喊”过"的次数,请把它还原成正确顺序,
即数组的第i个元素存储编号i的人喊“过“的次数

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

例子
输入
0 1 0
输出
1 0 0
只有一次过,发生在7,按顺序编号1的人遇到7  所以1 0 0,结束时的k不一定是7 也可以是 8 9, 喊过都是1 0 0

例子
输入
0 0 0 2 1
输出
0 2 0 1 0
一共三次喊过,发生在7 14 17,编号为2 的遇到7 17,编号为4 的遇到14。

代码实现(Python3) 方法一:
def relateSeven(n):
    return "7" in str(n) or n % 7 == 0


nums = list(map(int, input().split()))
# nums = [0,0,0,2,1]
k = len(nums)
flag = [0] * k # 与nuns长度相同的数组,用于统计对应位置出现与7相关的个数。
i = 1
while sum(nums) != sum(flag): # 只要标记的“7”个数不够就循环不断!
    for j in range(k): # 模拟排数,只需要统计与7相关即可,不需要真正进行排数。
        if relateSeven(i): # 相关则flag对应位置+1 
            flag[j] += 1 
        else: # 不相关则flag对应位置+0
            flag[j] += 0 # 注意不是赋值0,不然会覆盖之前该位置相关的记录。
        i += 1 # 数不断往上排
print(flag)
方法二:
def relateSeven(n):
    return "7" in str(n) or n % 7 == 0

nums = list(map(int, input().split()))

# 1.找出所有与7相关的数(k不超过200)
seven = []
k = len(nums)
for i in range(1, 201): 
    if relateSeven(i):
        seven.append(i)
# print(seven)

# 2.缩短查找范围
tem = []
for i in range(1, seven[sum(nums)]):
    tem.append(i)

# 3.二维数组模拟(类似矩阵但非矩阵)
res = []
while len(tem) >0:
    res.append(tem[:k])
    tem = tem[k:]
# print(res)

# 4.列的位置计数(与7相关+1)
flag = [0 for _ in range(k)]
for row in res:
    for j in row:
        if relateSeven(j):
            flag[row.index(j)] += 1
    # print(row)
print(flag)

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


新闻名称:华为OD机试-喊7游戏-创新互联
文章转载:http://scyanting.com/article/dggido.html