一道有关结构体的题,请您帮我的代码挑错

【题目】小云和朋友们去爬香山,为美丽的景色所陶醉,想合影留念。如果他们站成一排,男生全部在左(从拍照者的角度),并按照从矮到高的顺序从左到右排,女生全部在右,并按照从高到矮的顺序从左到右排,请问他们合影的效果是什么样的(所有人的身高都不同)?
【输入】第一行是人数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;
}
  • 关于该问题,我找了一篇非常好的博客,你可以看看是否有帮助,链接:一道简单的逆向题