7-2 宿舍谁最高? (20分)这个是错的,感谢网友试水

PTA测试题:7-2 宿舍谁最高? (20分)这个没通过 感谢网友替我试水

温馨提醒:这个代码还没有在PTA上跑过,因为没有办法提交了,如果拿去提交的话不一定能过。(手动狗头)

输出格式:
按宿舍号从小到大排序,输出每间宿舍身高最高的同学信息。题目保证每间宿舍只有一位身高最高的同学。

输入样例:
7
000000 Tom 175 120
000001 Jack 180 130
000001 Hale 160 140
000000 Marry 160 120
000000 Jerry 165 110
000003 ETAF 183 145
000001 Mickey 170 115

输出样例:
000000 Tom 175 120
000001 Jack 180 130
000003 ETAF 183 145

测试的时候没有做出来,后来想到了一个思路,仅留下不同宿舍中身高最高的学生的数据,其他的抛弃。
遇到不同宿舍的同学向下录入,相同宿舍的同学进行判断,身高比当前的高则覆盖当前数据,反之则仍在当前位置进行录入。并用count进行计数,判断当前输入次数是否超过原定值。
如果有大佬看到这篇博客,希望给新人一点建议,提前谢过各位。

#include 
#include 
#include 
#include 
using namespace std;
class Student{
public: //有利于缩短代码量(因为设为private还要写取值赋值函数)
	int  num;
	string name;
	float height,weight;
};
void Swap(Student* a,Student* b)
{
	Student c;
	c=*a;
	*a=*b;
	*b=c;
}
int main(){
	int n,i,j,k,count=0;
	cin>>n;
	if(n>10000||n<1) cin>>n;
	getchar();
	Student *S=new Student[n];

	for(i=0;i<n;i++)
	{
		k=i;//拷贝当前位置
		cin>>S[i].num>>S[i].name>>S[i].height>>S[i].weight;
		getchar();
		if(S[i].name.length()>16) //名字长度
		{
			S[i].name=S[i].name.substr(0,15);
		}

		for (j=0;j<k;j++)//判断第i(k)前是否有相同的宿舍
		{
			if(S[j].num==S[k].num)//宿舍号相同且后者身高更高则覆盖录入数据。
			{	
				if(S[j].height<S[k].height)
				{
					S[k]=S[j];
				}

				i--;//重新在当前位置输入。(身高相同以及更低的会在下一次输入被覆盖)
			}
		}

		count++;//统计实际输入次数
		if(count==n)break; 
	}

	for (j=0;j<=i;j++)//按照宿舍号排序(一定要遍历到最后一个元素)
	{
		k=j;
		int r;
		for (r=j+1;r<=i;r++)
		{
			if(S[k].num>S[r].num)
				k=r;
		}
		Swap(&S[k],&S[j]);
	}

	for (j=0;j<=i;j++)
	{
		cout<<setw(6)<<setfill('0')<<S[j].num;
		cout<<" "<<S[j].name<<" "<<S[j].height<<" "<<S[j].weight<<endl;
	}
	delete []S;//记得释放内存养成好习惯
}

温馨提醒:这个代码还没有在PTA上跑过,因为没有办法提交了,如果拿去提交的话不一定能过。(手动狗头)

你可能感兴趣的:(笔记,C++)