L1-030 一帮一 C++解法

 题目再现

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

输入格式:

输入第一行给出正偶数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

 知识点

struct student
{
	int sex;
	string name;
	bool print = false;
};
student *s=new student[n];

        最后这行语句创建了一个动态分配的结构体数组,其中 student 是一个结构体类型,n 是数组的大小。这是C++中使用动态内存分配的一种方式,通常用于在运行时创建具有可变大小的数据结构。

   new student[n] 创建了一个包含 nstudent 结构体的数组。这个数组是在堆上动态分配的,因此其大小在运行时确定,并且不会自动释放内存。你需要在不再需要这个数组时手动释放它,以避免内存泄漏。

        s 是一个指向第一个结构体的指针。它指向了分配的内存块的起始位置。

        这种方式允许你创建一个包含 nstudent 结构体的数组,而不需要提前知道数组的大小,这在需要动态管理内存的情况下非常有用。但要记住,一旦不再需要这个动态分配的数组,你需要使用 delete[] 来释放相应的内存,以防止内存泄漏,例如:

delete[] s;

AC代码

#include
#include 
using namespace std;
struct student
{
	int sex;
	string name;
	bool print = false;
};

int main() {
	int n;
	cin >> n;
	student *s = new student[n];//动态分配结构体数组

	for (int i = 0; i < n; i++)
	{
		cin >> s[i].sex >> s[i].name;
	}

	for (int i = 0; i < n; i++)
	{
		for (int j = n - 1; j > 0; j--)
		{
			if ( s[i].sex != s[j].sex && !s[i].print && !s[j].print )
			{
				cout << s[i].name << " " << s[j].name << endl;
				s[i].print = true;
				s[j].print = true;
			}
		}

	}
	delete[] s;


	return 0;
}

你可能感兴趣的:(c++,开发语言,PTA,算法,数据结构)