本文主要是介绍PAT1055 集体照 (25 分)【3/6通过】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目
后3个测试点过不去
代码
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
class Stu
{
public:int height = 0;string name;
};
class Row
{
public:int num;//这排学生人数int curSize = 0;Stu stu[10000];//这排的学生
};
int sortName(Stu a1, Stu a2)
{return a1.name < a2.name;
}
int sortHeight(Stu a1, Stu a2)
{return a1.height > a2.height;
}
int main()
{Stu stu[10000];Row row[10];int totalStu;int totalRow;cin >> totalStu >> totalRow;if (totalStu > 5)cout<<"?";//debug//输入int i;for (i = 0; i < totalStu; i++){cin >> stu[i].name;cin >> stu[i].height;}//姓名、身高排序sort(stu, stu + totalStu, sortName);sort(stu, stu + totalStu, sortHeight);//分排int stuNumOneRow = totalStu / totalRow;int stuNumFirstRow = totalStu / totalRow + totalStu % totalRow;int j;int in = 0;int mid;int direction;for (i = 0; i < totalRow; i++)//第i排{direction = 1;if (i == 0)row[i].num = stuNumFirstRow;//当前排学生总数else row[i].num = stuNumOneRow;mid = row[i].num / 2;//中间位置row[i].stu[mid] = stu[in];//放进中间学生in++;row[i].curSize++;if (row[i].curSize == row[i].num)continue;while (1){if (mid - direction<0)break;row[i].stu[mid - direction] = stu[in];in++;row[i].curSize++;if (row[i].curSize == row[i].num)break;row[i].stu[mid + direction] = stu[in];in++;row[i].curSize++;if (row[i].curSize == row[i].num)break;direction++;}}//输出for (i = 0; i < totalRow; i++){for (j = 0; j < row[i].num; j++){cout << row[i].stu[j].name;if (j != row[i].num - 1)cout << " ";}cout << endl;}//cout << endl;system("pause");return 0;
}
这篇关于PAT1055 集体照 (25 分)【3/6通过】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!