0
点赞
收藏
分享

微信扫一扫

A1109. Group Photo (25| 逻辑题,附详细注释,逻辑分析)


写在前面

  • 实现思路
  • 结构体容器数组封装学生元数据信息
  • 自定义比较函数
  • 容器数组根据身高倒排后,分排
  • 某一排,从原始数组中取第1位放中间
  • 间隔顺序迭代放置左边、右边
  • 具体代码
  • ​for(i=t+1; i<t+m; i=i+2)​
  • ​for(i=t+2; i<t+m; i=i+2)​
  • 打印输出当前排
  • 注意输出格式,行末不得有多余空格
  • 实现方案有难度,多练习,否则该类题目有挂掉风险

测试用例

input:
10 3
Tom 188
Mike 170
Eva 168
Tim 160
Joe 190
Ann 168
Bob 175
Nick 186
Amy 160
John 159

output:

ac代码

  • ​​1109. Group Photo (25)-PAT甲级真题​​
  • 推荐,逻辑清晰、容易块儿化理解

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct node
{
string name;
int height;
};
int cmp(node a, node b)
{
return a.height!=b.height ? a.height>b.height : a.name<b.name;
}

int main()
{
int n, k, m, i, j;
scanf("%d%d", &n, &k);

vector<node> stu(n);
for(i=0; i<n; i++)
cin >> stu[i].name >> stu[i].height;
sort(stu.begin(), stu.end(), cmp);

int t = 0, row = k;
while(row)
{
m = row==k ? n-n/k*(k-1) : n/k;
vector<string> stmp(m);
stmp[m/2] = stu[t].name;

/* 赋值左边列 */
j = m/2-1;
for(i=t+1; i<t+m; i=i+2)
stmp[j--] = stu[i].name;

/* 赋值右边列 */
j = m/2+1;
for(i=t+2; i<t+m; i=i+2)
stmp[j++] = stu[i].name;
printf("%s", stmp[0].data());

for(i=1; i<m; i++)
printf(" %s", stmp[i].data());
printf("\n");

t = t+m;
row--;
}

return 0;
}


举报

相关推荐

0 条评论