【题目描述】
小明和朋友们去爬香山,为美丽的景色所陶醉,想合影留念。如果他们站成一排,男生全部在左(从拍照者的角度),并按照从矮到高的顺序从左到右排,女生全部在右,并按照从高到矮的顺序从左到右排,请问他们合影的效果是什么样的(所有人的身高都不同)?
【输入】
第一行是人数 n(2≤n≤40,且至少有 1个男生和 1个女生)。
后面紧跟 n行,每行输入一个人的性别(男male或女female)和身高(范围在 [0,2] 内的浮点数,单位米),两个数据之间以空格分隔。
【输出】
n个浮点数,模拟站好队后,拍照者眼中从左到右每个人的身高。每个浮点数需保留到小数点后2位,相邻两个数之间用单个空格隔开。
【输入样例】
6
male 1.72
male 1.78
female 1.61
male 1.65
female 1.70
female 1.56
【输出样例】
1.65 1.72 1.78 1.70 1.61 1.56
首先第一种解题思路是定义两个数组分别存储男性身高和女性身高,并记录数组长度,然后一个数组升序排序,另一个数组降序排序,排好序之后输出。代码如下:
#include<bits/stdc++.h>
using namespace std;
bool cmp(double a,double b){
return a>b;
}
int main(){
double a[40],b[40];
int len_a=0,len_b=0;
int n;
string s;
double x;
cin>>n;
for(int i=0;i<n;i++){
cin>>s>>x;
if(s=="male"){
a[len_a++] = x;
}else{
b[len_b++] = x;
}
}
//cout<<len_a<<len_b;
sort(a,a+len_a);
sort(b,b+len_b,cmp);
cout<<fixed<<setprecision(2);
for(int i=0;i<len_a;i++){
cout<<a[i]<<" ";
}
for(int i=0;i<len_b;i++){
cout<<b[i]<<" ";
}
}
第二种解题思路是定义一个结构体来存储输入的数据,并遵循指定的排序规则:男性在前,女性在后,性别相同的情况下,如果是男性,升序排序,如果是女性降序排序。代码如下:
#include<bits/stdc++.h>
using namespace std;
struct person{
bool gender;
double height;
}p[40];
bool cmp(person a,person b){
if(a.gender==b.gender){
if(a.gender == 1){
return a.height<b.height;
}else{
return a.height>b.height;
}
}else{
return a.gender>b.gender;
}
}
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
string s;
double x;
cin>>s>>x;
if(s=="male") p[i].gender=1;
else p[i].gender=0;
p[i].height = x;
}
sort(p,p+n,cmp);
cout<<fixed<<setprecision(2);
for(int i=0;i<n;i++){
cout<<p[i].height<<" ";
}
return 0;
}
第三种解题思路,数学运算方式:用4去减男性的身高,女性的身高保持不变,将数组的排序方式改为降序排序。
#include<bits/stdc++.h>
using namespace std;
bool cmp(double a,double b){
return a>b;
}
int main(){
int n;
int len_a=0;
string s;
cin>>n;
double a[n];
for(int i=0;i<n;i++){
cin>>s>>a[i];
if(s=="male"){
a[i] = 4-a[i];
len_a++;
}
}
sort(a,a+n,cmp);
cout<<fixed<<setprecision(2);
for(int i=0;i<len_a;i++){
cout<<4-a[i]<<" ";
}
for(int i=len_a;i<n;i++){
cout<<a[i]<<" ";
}
}
标签:排序,55.1,int,gender,合影,len,3326,double,male
From: https://www.cnblogs.com/Andre/p/18206496