第6章-2.一帮一 (15分)

“一帮一学习小组”是中小学中常见的学习组织方式,老师把学习成绩靠前的学生跟学习成绩靠后的学生排在一组。本题就请你编写程序帮助老师自动完成这个分配工作,即在得到全班学生的排名后,在当前尚未分组的学生中,将名次最靠前的学生与名次最靠后的异性学生分为一组。

输入格式:

输入第一行给出正偶数N(≤50),即全班学生的人数。此后N行,按照名次从高到低的顺序给出每个学生的性别(0代表女生,1代表男生)和姓名(不超过8个英文字母的非空字符串),其间以1个空格分隔。这里保证本班男女比例是1:1,并且没有并列名次。

输出格式:

每行输出一组两个学生的姓名,其间以1个空格分隔。名次高的学生在前,名次低的学生在后。小组的输出顺序按照前面学生的名次从高到低排列。

输入样例:

8
0 Amy
1 Tom
1 Bill
0 Cindy
0 Maya
1 John
1 Jack
0 Linda

输出样例:

Amy Jack
Tom Linda
Bill Maya
Cindy John
 1 # 一帮一
 2 # Author: cnRick
 3 # Time  : 2020-4-13
 4 n = int(input())
 5 stus= dict()
 6 boys,girls = list(),list()
 7 boysPoint,girlsPoint = 0,0
 8 for i in range(n): #构建学生字典(姓名:性别(用0和1表示)),并且把男生和女生分两组
 9     thisLine = input().split()
10     stus[thisLine[1]] = thisLine[0]
11     if thisLine[0] == "0":
12         girls.append(thisLine[1])
13     elif thisLine[0] == "1":
14         boys.append(thisLine[1])
15
16 girls.reverse()
17 boys.reverse()
18
19 breakCnt = 0
20 for name,gender in stus.items():
21     if gender == "0":
22         print("{} {}".format(name,boys[boysPoint]))
23         boysPoint += 1
24         breakCnt += 1
25     elif gender == "1":
26         print("{} {}".format(name,girls[girlsPoint]))
27         girlsPoint += 1
28         breakCnt += 1
29     if breakCnt == n//2:
30         break
31
32     
 

原文地址:https://www.cnblogs.com/dreamcoding/p/12693203.html

时间: 2024-11-02 17:50:46

第6章-2.一帮一 (15分)的相关文章

第4章-9.查询水果价格 (15分)

给定四种水果,分别是苹果(apple).梨(pear).桔子(orange).葡萄(grape),单价分别对应为3.00元/公斤.2.50元/公斤.4.10元/公斤.10.20元/公斤. 首先在屏幕上显示以下菜单: [1] apple [2] pear [3] orange [4] grape [0] exit 用户可以输入编号1~4查询对应水果的单价.当连续查询次数超过5次时,程序应自动退出查询:不到5次而用户输入0即退出:输入其他编号,显示价格为0. 输入格式: 输入在一行中给出用户连续输入

第3章-4 查找指定字符 (15分)

本题要求编写程序,从给定字符串中查找某指定的字符. 输入格式: 输入的第一行是一个待查找的字符.第二行是一个以回车结束的非空字符串(不超过80个字符). 输出格式: 如果找到,在一行内按照格式“index = 下标”输出该字符在字符串中所对应的最大下标(下标从0开始):否则输出"Not Found". 输入样例1: m programming 输出样例1: index = 7 输入样例2: a 1234 输出样例2: Not Found 1 # 查找指定字符 2 # Author: c

浙大版《C语言程序设计(第3版)》题目集 习题3-5 三角形判断 (15 分)

习题3-5 三角形判断 (15 分) 给定平面上任意三个点的坐标(x1,y1).(x2,y2).(x3,y3),检验它们能否构成三角形.1??,y?1??).(x?2??,y?2??).(x?3??,y?3??),检验它们能否构成三角形 输入格式: 输入在一行中顺序给出六个[?100,100]范围内的数字,即三个点的坐标x1.y1.x2.y2.x3.y3.(.x1,y1).(x2,y2).(x3,y3)1??.y?1??.x?2??.y?2??.x?3??.y?3??. 输出格式: 若这3个点不

求整数段和 (15 分)

第2章-14 求整数段和 (15 分) 给定两个整数A和B,输出从A到B的所有整数以及这些数的和. 输入格式: 输入在一行中给出2个整数A和B,其中?100≤A≤B≤100,其间以空格分隔. 输出格式: 首先顺序输出从A到B的所有整数,每5个数字占一行,每个数字占5个字符宽度,向右对齐.最后在一行中按Sum = X的格式输出全部数字的和X. 输入样例: -3 8 输出样例: -3 -2 -1 0 1 2 3 4 5 6 7 8 Sum = 30 代码 a,b = map(int,input().

pta 数据结构 习题2.4 递增的整数序列链表的插入(15 分)

习题2.4 递增的整数序列链表的插入(15 分) 本题要求实现一个函数,在递增的整数序列链表(带头结点)中插入一个新整数,并保持该序列的有序性. 函数接口定义: List Insert( List L, ElementType X ); 其中List结构定义如下: typedef struct Node *PtrToNode; struct Node { ElementType Data; /* 存储结点数据 */ PtrToNode Next; /* 指向下一个结点的指针 */ }; type

PAT-JAVA-5-2 然后是几点 (15分)

5-2 然后是几点   (15分) 有时候人们用四位数字表示一个时间,比如1106表示11点零6分.现在,你的程序要根据起始时间和流逝的时间计算出终止时间. 读入两个数字,第一个数字以这样的四位数字表示当前时间,第二个数字表示分钟数,计算当前时间经过那么多分钟后是几点,结果也表示为四位数字.当小时为个位数时,没有前导的零,即5点30分表示为530.注意,第二个数字表示的分钟数可能超过60,也可能是负数. 输入格式: 输入在一行中给出2个整数,分别是四位数字表示的起始时间.以及流逝的分钟数,其间以

1001 害死人不偿命的(3n+1)猜想 (15)(15 分)

1001 害死人不偿命的(3n+1)猜想 (15)(15 分) 卡拉兹(Callatz)猜想: 对任何一个自然数n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把(3n+1)砍掉一半.这样一直反复砍下去,最后一定在某一步得到n=1.卡拉兹在1950年的世界数学家大会上公布了这个猜想,传说当时耶鲁大学师生齐动员,拼命想证明这个貌似很傻很天真的命题,结果闹得学生们无心学业,一心只证(3n+1),以至于有人说这是一个阴谋,卡拉兹是在蓄意延缓美国数学界教学与科研的进展-- 我们今天的题目不是证明卡

1006 换个格式输出整数 (15)(15 分)

1006 换个格式输出整数 (15)(15 分) 让我们用字母B来表示"百".字母S表示"十",用"12...n"来表示个位数字n(&lt10),换个格式来输出任一个不超过3位的正整数.例如234应该被输出为BBSSS1234,因为它有2个"百".3个"十".以及个位的4. 输入格式:每个测试输入包含1个测试用例,给出正整数n(&lt1000). 输出格式:每个测试用例的输出占一行,用规定的

习题2.5 两个有序链表序列的合并(15 分)<有疑问?L1 L2 没办法变空>

习题2.5 两个有序链表序列的合并(15 分) 本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列. 函数接口定义: List Merge( List L1, List L2 ); 其中List结构定义如下: typedef struct Node *PtrToNode; struct Node { ElementType Data; /* 存储结点数据 */ PtrToNode Next; /* 指向下一个结点的指针 */ }; typedef PtrToNode L