【题目】小云和朋友们去爬香山,为美丽的景色所陶醉,想合影留念。如果他们站成一排,男生全部在左(从拍照者的角度),并按照从矮到高的顺序从左到右排,女生全部在右,并按照从高到矮的顺序从左到右排,请问他们合影的效果是什么样的(所有人的身高都不同)?
【输入】第一行是人数n(2 <= n <= 40,且至少有1个男生和1个女生)。
后面紧跟n行,每行输入一个人的性别(男male或女female)和身高(浮点数,单位米),两个数据之间以空格分隔。
【输出】n个浮点数,模拟站好队后,拍照者眼中从左到右每个人的身高。每个浮点数需保留到小数点后2位,相邻两个数之间用单个空格隔开。
#include
using namespace std;
int n;
bool cmp(int x,int y){
return x%10>y%10;
}
for(n=2;n<=40;n++){
Sort(num,num+n,cmp){
for(int i=0;i" ";
}
}
return 0;
}
struct photo{
char sex;
float high;
}pho man,pho woman;
bool cmp(pho man,pho woman){
sort(man.high);
Sort(woman.high);
return sort;
return Sort;
}
int main(){
cin>>n;
cout<setprecision(20);
reutrn 0;
}
参考GPT和自己的思路:
首先,你的代码中存在一些语法错误和逻辑错误。下面是一些改正建议:
1.排序函数cmp中的参数应该为const引用类型,即bool cmp(const int& x,const int& y)
。
2.排序函数cmp的返回值应该是两个人的比较结果,不应该是sort或者Sort。
3.排序函数cmp应该对男女分别排序,并按照题目要求排序。
4.在main函数中,应该先存储每个人的信息(性别和身高),然后根据题目要求排序输出身高即可。
5.在排序时,可以使用sort函数(而不是Sort)。
下面是一个参考代码(仅供参考):
#include<bits/stdc++.h>
using namespace std;
struct person{
char sex; // M表示男性,F表示女性
float height;
};
bool cmp(const person& a, const person& b){
if(a.sex == b.sex){
if(a.sex == 'M') return a.height < b.height; // 如果都是男性,则身高小的排在前面
else return a.height > b.height; // 如果都是女性,则身高高的排在前面
}
return (a.sex == 'M'); // 如果不是同性,则男性排在前面
}
int main(){
int n;
cin >> n;
vector<person> p(n);
for(int i = 0; i < n; i++){
cin >> p[i].sex >> p[i].height;
}
sort(p.begin(), p.end(), cmp);
for(int i = 0; i < n; i++){
cout << fixed << setprecision(2) << p[i].height << " ";
}
return 0;
}