晓君c++ 2024-03-31 20:37 采纳率: 70%
浏览 6

生产流水线c++求解

描述

315之前,工厂领导为了抽检自己工厂的 n(n<=10000) 件产品是否合格,对每件产品使用小写字母进行分类,专门设置了一条环形流水线,对产品进行抽检,抽检规则如下:

顺时针抽检,每次抽出第 m 个产品,抽出的产品不再参与抽检,总共抽取 k 次,请依次输出抽检的产品分类,并且输出被抽检的最多产品的分类。

输入描述
第一行为三个整数,n、m、k(int类型范围内,且 k 小于 n )
第二行为一个字符串,表示待抽检的产品

输出描述
第一行为一个字符串,表示依次被抽检的产品分类
第二行为一个字符,表示被抽检的件数最多的产品分类(最多情况不唯一请按照字母表顺序输出)

样例输入 1

6 1 5
a s d d w e
样例输出 1

a s d d w
d

  • 写回答

3条回答 默认 最新

  • 码农阿豪@新空间 优质创作者: Java、后端开发技术领域 2024-03-31 20:37
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    问题分析: 这个问题一共有三个部分,第一个部分是输入,需要读入 n,m,k 和待抽检的产品;第二个部分是抽检过程,需要顺时针抽取 k 次,并记录每次的分类;第三个部分是输出,需要按照顺序输出每次的分类和最多被抽检的分类。 解决方案: 第一部分:输入。 根据题目描述,先读入三个整数,再读入一个字符串。代码如下:
    n, m, k = map(int, input().split())
    products = input().split()[:n]
    

    需要注意的是,输入的字符串可能有超过 n 个产品,因此需要使用切片操作将其截断。 第二部分:抽检过程。 首先需要初始化一个数组,用于记录每个产品被抽检的次数。然后按照题目描述中的规则,依次抽出第 m 个产品,并将其分类记录下来。具体实现如下:

    freq = [0] * n  # 初始化每个产品的出现次数为 0
    cur = 0  # 当前抽检的产品编号
    categories = []  # 记录每次抽检的分类
    for i in range(k):
        for j in range(m - 1):
            # 找到能够抽检的下一个产品
            while freq[cur % n] != 0:
                cur += 1
            cur += 1
        # 抽检当前产品,并记录分类和出现次数
        category = products[cur % n]
        categories.append(category)
        freq[cur % n] += 1
    

    需要注意的是,因为是环形流水线,所以在寻找下一个产品时需要对产品编号取模。 第三部分:输出。 需要按照顺序输出每次抽检的分类和最多被抽检的分类。具体实现如下:

    # 按顺序输出每次抽检的分类
    print(" ".join(categories))
    # 找到出现次数最多的产品分类
    max_freq = max(freq)
    max_categories = [products[i] for i in range(n) if freq[i] == max_freq]
    max_category = min(max_categories)  # 按字母表顺序选出一个最大分类
    print(max_category)
    

    其中,第一个 print 语句使用了 join 方法将数组转换为字符串输出。第二个 print 语句需要找到出现次数最多的分类,如果最多出现次数不唯一,则需要按照字母表顺序选出一个分类。可以使用 max 函数找到最大出现次数,再使用列表推导式找到最大分类的编号,最后使用 min 函数按字母表顺序选出一个分类。 完整代码如下:

    评论

报告相同问题?

问题事件

  • 创建了问题 3月31日