看的网上的思路
首先结构体的sort排序
int cmp(struct People a,struct People b)
{return a.height != b.height ? a.height> b.height : a.name < b.name;
}
按身高从高到低排,按名字从小到大排
sort实现原理
原始的cmp是
return a<b;
当a<b时返回真,按从小到大排。
可以自己修改cmp,真的返回什么就怎么排序
这题用了vector容器
vector使用方法
vector<something> p(n);
something换成自己需要的类型
思路:
一排一排的
最后一排站了多的人,计算最后一排的人数
int row = k;
if(row == k)
{m = n - n/k*(k-1);
}
row--;
当row!=k时
else
{m = n/k;
}
后面站位先找到中心点
vector<string> stemp(m);
stemp[m/2] = p[t].name;
然后从中往左边排,要左右顺序排,所以中间隔两个
int j = m/2-1;
for(i = t+1;i<t+m;i=i+2)
{stemp[j--] = p[i].name;
}
j = m/2+1;
for(i=t+2;i<t+m;i=i+2)
{
stemp[j++] = p[i].name;
}
最后打印啦
完整code:
#include<stdio.h>
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;struct People
{string name;int height;
};int cmp(struct People a,struct People b)
{return a.height != b.height ? a.height> b.height : a.name < b.name;
}int main()
{int n,i,k;cin >> n >> k;vector<People> p(n);for(i=0;i<n;i++){cin >> p[i].name;cin >> p[i].height;}sort(p.begin(),p.end(),cmp);//从高到矮排 // cout << p[0].name;int t=0,row = k,m;while(row){//cout << row << " ";if(row == k){m = n - n/k*(k-1);}else{m = n/k;}//cout << m << endl;vector<string> stemp(m);stemp[m/2] = p[t].name;//左边int j = m/2-1;for(i = t+1;i<t+m;i=i+2){stemp[j--] = p[i].name;}//右边j = m/2+1;for(i=t+2;i<t+m;i=i+2){stemp[j++] = p[i].name;} cout << stemp[0];for(i=1;i<m;i++){cout << " " << stemp[i];}cout << endl;t = t+m;row--;}return 0;
}