PAT1055 集体照最后一个测试点死活过不了!!!

// ConsoleApplication30.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
struct person {
	char name[10];
	int height;
};
person p[10001];
bool cmp(person x,person y) {
	if (x.height > y.height)
		return true;
	 if (x.height < y.height)
		return false;
	 if (x.height == y.height) {
		if (strcmp(x.name , y.name)>=0)
			return false;
		else
			return true;
	 }

}
char a[1002][10];
int main()
{
	int num, kpai,amount,z_amount,middle,left=1,right=0,all=0;
	bool flag = true;
	cin >> num >> kpai;
	amount = num / kpai;
	z_amount = num - amount * (kpai-1);
	for (int i = 0; i < num; i++) 
		cin >> p[i].name >> p[i].height;
	sort(p, p + num, cmp);
	middle = z_amount / 2 + 1;//先排最后一排
	for (int i = 0; i < z_amount; i++) {
		if (flag) {
			strcpy(a[middle + right], p[i].name);
			right++;
			flag = false;
		}
		else {
			strcpy(a[middle - left], p[i].name);
			left++;
			flag = true;
		}
	}
	cout <<a[1];
	for (int i = 2; i <= z_amount; i++)
		cout << " "<<a[i];//输出最后一排的人
	cout << endl;
	middle = amount / 2 + 1;
	all += z_amount;
	for (int j = 0; j < kpai - 1; j++) {
		left = 1, right = 0,flag=true;
		for (int i=0; i < amount; i++,all++) {
			if (flag) {
				strcpy(a[middle + right], p[all].name);
				right++;
				flag = false;
			}
			else {
				strcpy(a[middle - left], p[all].name);
				left++;
				flag = true;
			}
		}
		cout << a[1];
		for (int i = 2; i <= amount; i++)
			cout << " " << a[i];//输出除最后一排的人
		cout << endl;
	}
}


在这里插入图片描述

发布了17 篇原创文章 · 获赞 0 · 访问量 190

猜你喜欢

转载自blog.csdn.net/w17390956947/article/details/104906336