3326:练55.1 合影效果

【题目描述】
小明和朋友们去爬香山,为美丽的景色所陶醉,想合影留念。如果他们站成一排,男生全部在左(从拍照者的角度),并按照从矮到高的顺序从左到右排,女生全部在右,并按照从高到矮的顺序从左到右排,请问他们合影的效果是什么样的(所有人的身高都不同)?

【输入】
第一行是人数 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]<<" ";
	}
}

posted @ 2024-05-22 16:22  Pudding10335  阅读(64)  评论(0编辑  收藏  举报