早教吧 育儿知识 作业答案 考试题库 百科 知识分享

一道算法题n个小朋友在老师的带领下玩游戏.其中需要分组,老师打算根据大家的衣服颜色分组.已知衣服颜色用0-9的数字表示.老师决定每k个人分为一组.每一组的小朋友必须身穿同一种颜色的

题目详情
一道算法题
n个小朋友在老师的带领下玩游戏.
其中需要分组,老师打算根据大家的衣服颜色分组.
已知衣服颜色用0-9的数字表示.
老师决定每k个人分为一组.每一组的小朋友必须身穿同一种颜色的衣服.
请你告诉老师,是否能成功分组.
Input
仅一组数据
第一行两个整数n,k (1
▼优质解答
答案和解析
import sys

def main():
    n, k = map(int, input().split())
    l = map(int, input().split())
    
    if n != len(l):
        print "Invalid testcase"
        sys.exit(1)
    if n % k != 0:
        print "NO"
        sys.exit(0)
    
    l.sort()
    
    while l:
        t = l[:k]
        c = map(lambda x: x == t[0], t)
        if not all(c):
            print "NO"
            sys.exit(0)
        l = [k:]
    
    print "YES"
    
main()

简单说一下这个解,

想要YES, 那么必须满足几个条件:

1, n个人可以被平均分成x组, 每组k人.

检测这个条件就求模, n % k, 就可以了

2, 每组的学生颜色相同

检测这个条件, 我们先把数列排序,

就相当于不管行不行, 我们先把组分了,

同色的人在一起.

然后就每次取k个人, 检测是否所有的人穿同样颜色的衣服, 就可以了.

while l, 当还有学生剩下

t = l[:k], 取k个学生

c = map(lambda x: x == t[0], t), 拿所有学生跟第一个学生比较

if not all(c), 如果不全都一样

那就NO

如果全都一样, 那就接着对l[k:], 也就是剩下的学生做相同的比较

因为前面检测过了n % k, 所以可以确定每次都能取到k个学生.

所有检测全都通过的话, 那么就是YES了

看了 一道算法题n个小朋友在老师的...的网友还看了以下:

数学题。需要最简单的做法,好懂哦!谢谢哦急需请快点帮我解答我永远都会谢谢你的一个玩具上有红色和白色  2020-05-14 …

文玩核桃修完黄边颜色不一样怎么办修完了,颜色浅,店主说修的重,现在颜色浅,把玩时间长了就一样了  2020-05-17 …

一一种电脑扑克小游戏,玩1局要3分钟,也可以单独玩,也可以双人玩,小军和小红、小亮一起玩.每人玩两  2020-06-22 …

一种电脑扑克游戏,玩1局要3分钟,可以单独玩,也可以双人玩,小军和小红、小亮一起玩.每人玩两局,至  2020-06-22 …

一种电脑小游戏,玩1局要5分钟,可以单人玩,也可以双人玩.小东和爸爸、妈妈一起玩,每人玩两局,至少  2020-06-22 …

1.一种玩具,有黑白红三种按钮及弹子若干粒.按白色按钮能吞进一粒弹子;按黑色按钮能吐出一粒弹子;按  2020-06-23 …

有一种玩具,有一个红色按钮、一个黄色按钮和30个木偶所组成的,按一下红色按钮就会有个站着的小木偶坐  2020-06-23 …

某工厂生产一批玩具,形状为圆盘,它的一面为蓝色,另一面为黄色,圆周上均匀分布安装2个球,其中……某  2020-06-24 …

某工厂生产一批玩具,形状为圆盘,它的一面为蓝色,另一面为黄色,圆周上均匀分布安装2个球,其中3个为  2020-06-24 …

一个玩具上有红色按钮和白色按钮各一个,还有100个能站能坐的小木偶,按一下红色按钮就会有一个小木偶  2020-06-29 …