天梯赛L1-030 一帮一

发布时间 2023-05-25 18:59:26作者: 我爱软工

一、问题描述

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

输入格式:

输入第一行给出正偶数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)先定义一个student类,类中包括性别sex,名字id,以及标志flag(来判断该名学生是否帮助了别人或者被别人帮助);

(2)类中包含一个构造函数student()将标志flag置为1;

(3)从键盘接收一个n,表示学生的总数,并接收n组学生的数据(包括sex,id,flag);

(4)利用for循环对每个学生进行遍历,第一重循环从第一个学生开始,第二重循环从最后一个学生开始,判断条件(①性别不同,②两名学生的flag均不为1)此时表明配对成功,输出两名学生的名字,并将这两名学生的flag置为0;

(5)完成for循环结束;

三、程序流程图

四、伪代码

五、代码

 1 #include <iostream>
 2 #include <string>
 3 using namespace std;
 4 class student
 5 {
 6 public:
 7     int sex;
 8     string id;
 9     int flag;
10     student()
11     {
12         flag=1;
13     }
14 };
15 int main()
16 {
17     int n;
18     cin>>n;
19     student a[100];
20     for (int i = 0; i < n; i++)
21     {
22         cin >> a[i].sex >> a[i].id;
23     }
24     for (int i = 0; i < n ; i++)
25     {
26         for(int j=n-1;j>0;j--)
27         {
28             if((a[i].sex!=a[j].sex)&&a[j].flag==1&&a[i].flag==1)
29             {
30                 cout<<a[i].id<<" "<<a[j].id<<endl;
31                 a[i].flag=0;
32                 a[j].flag=0;
33             }
34         }
35     }
36     return 0;
37 }

 

六、总结

(1)一个对象具有多种属性需要操作时,可以使用类,通过定义类来实现所需要的操作;