刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

简答题

评选最佳品牌

n个评委投票,在m个商品中评选一个最佳品牌。

评选采用多轮淘汰制,即:每轮投票,淘汰掉得票最少的候选品牌(得票并列最少的品牌一起淘汰)。

如此一轮轮淘汰下去,如果最后只剩下一个品牌当选,即告评选成功。

但如果在某轮投票中,当时未被淘汰的所有候选品牌(大于等于两个品牌)都并列得票最少,即告评选失败。

如果评选成功就输出当选品牌号。否则输出最后一轮评选时唯一选票数的相反数。

在评选流程中,每个评委的态度都可用一个序列来表示,例如当m=5 时,某评委的评选态度序列为:

3、5、1、2、4则表示该评委: 优先投3号,当3 号被淘汰时投5号,当3和5都被淘汰时投 1,当3、5、1都被淘汰时投 2,仅剩 4 号时才投 4 号品牌的票。

选票的序列中可以表示弃权,用0来表示,例如当 m=5 时,某评委的评选态度序列为: 3、5、0,则表示该评委:优先投3号,当3号被淘汰时投5号,其它情况下不投任何品牌的票编程实现:

请你编一个程序,模拟各轮投票的过程,得到评选结果

输入:

第一行: m(0<m<10,表示参加评选的品牌数)和 N(1n<1000,表示参加投票的评委数),之间以空格分隔接下来的n行: 每行都是长度不超 m 的数字字符串,每个字符串表示一个评委的评选态度。

输出:

评选结果。

样例1输入:

3 4
123
213
132
1 0

样例1输出:

1

样例2输入:

3 4
321
213
231
312

样例2输出:

-2

样例数据分析

样例1:

第一行3 4代表3个品牌,4个评委

第一轮投票,3个评委优先选择1号品牌,1个评委选择2号品牌,品牌3得票最少,淘汰掉

第二轮投票3个评委优先选择1号品牌,1个评委选择2号品牌,品牌2得票最少,淘汰掉,淘汰2号品牌后,只剩一个1号品牌,1号品牌胜出

最终结果1

样例2:

第一行34代表3个品牌4个评委

第一轮投票,2个评委选择2号品牌,两个评委选择3号品牌,1号得票最少,淘汰掉

第二轮投票,2个评委选择2号品牌,两个评委选择3号品牌,由于只剩下两个品牌,且并列最少,都是2票代表评选失败需要输出最后一轮票数2的相反数-2

最终结果-2

使用微信搜索喵呜刷题,轻松应对考试!

答案:

```pythonm, n = map(int, input().split())votes = []for _ in range(n):votes.append(list(map(int, input().split())))while m > 1:counts = [0] * (m + 1)for vote in votes:counts[vote[0]] += 1min_votes = min(counts[1:])for i in range(1, m + 1):if counts[i] == min_votes:counts[i] = -1m = counts.index(-1)print(m)```

解析:

【喵呜刷题小喵解析】:

这个问题是一个模拟投票过程的问题,我们需要模拟多轮投票,直到评选出最佳品牌或者评选失败。

首先,我们读入品牌数 m 和评委数 n,然后读入每个评委的投票序列。

在每一轮投票中,我们需要统计每个品牌的得票数,找出得票最少的品牌,将其淘汰。如果所有未被淘汰的品牌得票数相同,那么评选失败,输出最后一轮得票数的相反数。

我们可以使用一个长度为 m+1 的数组 counts 来记录每个品牌的得票数,初始时所有品牌的得票数都为 0。然后遍历每个评委的投票序列,将对应品牌的得票数加 1。

然后,我们找出得票最少的品牌,将其得票数设为 -1,表示已经被淘汰。同时,我们将变量 m 更新为被淘汰品牌的编号,这样在下一轮投票中可以直接淘汰掉该品牌。

最后,如果 m 大于 1,表示还有多个品牌存在,我们可以进行下一轮投票;否则,输出变量 m 的值,表示评选结果。如果 m 的值为正数,表示评选成功,当选品牌为 m;如果 m 的值为负数,表示评选失败,最后一轮得票数的相反数为 -m。
创作类型:
原创

本文链接:评选最佳品牌 n个评委投票,在m个商品中评选一个最佳品牌。 评选采用多轮淘汰制,即:每轮投票,淘汰掉

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share