E-喊7的次数重排(100p)

刷题笔记合集🔗

喊7的次数重排

问题描述

喊7是一个传统的聚会游戏。 个人围成一圈,按顺时针从 1 到 编号。游戏规则如下:

  1. 编号为 1 的人从 1 开始喊数。
  2. 下一个人喊的数字为上一个人的数字加 1。
  3. 当将要喊出来的数字是 7 的倍数或者数字本身含有 7 时,不能直接喊出这个数字,而是要喊"过"。
  4. 假定所有人都没有失误地在正确的时机喊了"过"。

现在,给定一个长度为 的数组,存储了打乱顺序的每个人喊"过"的次数。你的任务是将它还原成正确的顺序,即数组的第 个元素应存储编号 的人喊"过"的次数。

输入格式

输入为一行,包含空格分隔的喊"过"的次数。数字的个数即为

输出格式

输出为一行,包含顺序正确的喊"过"的次数,用空格分隔。

样例输入1

0 1 0

样例输出1

1 0 0

样例输入2

0 0 0 2 1

样例输出2

0 2 0 1 0

样例解释

样例 解释说明
样例1 一共只有一次喊"过",那只会发生在需要喊 7 时。按顺序,编号为 1 的人会遇到 7,故输出 1 0 0。注意:结束时的 不一定是 7,也可以是 8、9 等,喊过的次数都是 1 0 0。
样例2 一共有三次喊"过",发生在 7、14、17。按顺序,编号为 2 的人会遇到 7 和 17,编号为 4 的人会遇到 14,故输出 0 2 0 1 0。

数据范围

题解

这道题目的核心在于模拟喊7游戏的过程,并记录每个人喊"过"的次数。

解题思路如下:

  1. 首先,我们需要计算出总共喊"过"的次数,即输入数组的和。
  2. 然后,我们从 1 开始模拟喊数的过程,直到喊"过"的次数达到总数。
  3. 在模拟过程中,我们需要判断当前数字是否需要喊"过"(是 7 的倍数或含有 7)。
  4. 如果需要喊"过",我们就给当前玩家的计数器加 1。
  5. 每喊完一个数,我们就移动到下一个玩家,注意要循环到第一个玩家。

参考代码

  • Python
# 读取输入并转换为整数列表
a = list(map(int, input().split()))

# 计算总的"过"的次数
s = sum(a)
# 获取玩家数量
n = len(a)
# 初始化结果列表,用于存储每个玩家喊"过"的次数
p = [0] * n
# 初始化当前数字和当前玩家索引
i = 1  # 从1开始喊数
j = 0  # 从第一个玩家开始

# 模拟喊数过程
while s > 0:
    # 判断当前数字是否需要喊"过"
    if i % 7 == 0 or '7' in str(i):
        s -= 1  # 减少剩余的"过"的次数
        p[j] += 1  # 当前玩家喊"过"的次数加1
    i += 1  # 数字加1
    j = (j + 1) % n  # 移动到下一个玩家,使用模运算实现循环

# 输出结果,将整数列表转换为字符串并用空格连接
print(' '.join(map(str, p)))
#include <stdio.h>
#include <string.h>

// 判断一个数字是否包含7
int contains7(int num) {
    while (num > 0) {
        if (num % 10 == 7) return 1;
        num /= 10;
    }
    return 0;
}

int main() {
    int a[100], p[100] = {0};
    int n = 0, s = 0;
    
    // 读取输入
    while (scanf("%d", &a[n]) != EOF) {
        s += a[n];
        n++;
    }
    
    int i = 1, j = 0;
    // 模拟喊数过程
    while (s > 0) {
        if (i % 7 == 0 || contains7(i)) {
            s--;
            p[j]++;
        }
        i++;
        j 

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

算法刷题笔记 文章被收录于专栏

本专栏收集并整理了一些刷题笔记

全部评论
有需要的宝子可以订阅专栏哦~
点赞 回复 分享
发布于 2024-11-08 11:07 江苏

相关推荐

牛客小菜鸡66:boss里面,招人的叫老板,找工作的叫牛人
点赞 评论 收藏
分享
评论
2
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务