首页 > 其他分享 >3326:练55.1 合影效果

3326:练55.1 合影效果

时间:2024-05-22 16:33:04浏览次数:25  
标签:排序 55.1 int gender 合影 len 3326 double male

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

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

相关文章

  • 纸张上的合影
        我姐善绘画,我哥善书法,我则喜欢写文章。想到什么值得写的,我总会写到白纸上,有时候字数很少,3、4百字而已,底下便留有大片空白,我姐看到了觉得文章写的妙,只是少了一副画,于是从口袋中掏出水笔,就着文章作画。写景的,画幅山水画;写人物的,画幅肖像画。画的很大,显得文章的字很小,别......
  • 结构体+排序——OpenJudge 1.10 07:合影效果
    描述小云和朋友们去爬香山,为美丽的景色所陶醉,想合影留念。如果他们站成一排,男生全部在左(从拍照者的角度),并按照从矮到高的顺序从左到右排,女生全部在右,并按照从高到矮的顺序从左到右排,请问他们合影的效果是什么样的(所有人的身高都不同)?输入第一行是人数n(2<=n<=40,且至少有1......
  • 19113133262(微信同号)2024年环境能源与全球市场营销国际学术会议(ICEEGM 2024)
    2024年环境能源与全球市场营销国际学术会议(ICEEGM2024)会议主题:(主题包括但不限于,更多主题请咨询会务组苏老师)节能技术煤矿工程与技术能源存储技术可再生能源热能与动力工程 能源工程与环境工程 可再生能源技术和系统能源安全和清洁利用 矿产资源与采矿工......
  • TZOJ3326--Barn Repair(优先队列,贪心)
    题目简述: 某天刮了一阵大风,把牛棚的门吹飞了,总共有s个牛棚,幸运的是并不是每个牛棚都有牛。现在你可以购买m块木板,商店里有各种型号的木板,木板长度为多少就需要多少金钱。木板用来给牛棚装上门。要求把所有有牛的牛棚都装上门,并且花的金钱最少。给了一正整数C,接下来C行每行一......
  • 顺序表应用3:元素位置互换之移位算法(SDUT 3326)
     题解:用一个for,循环m次,每次都把最前面的放到最后面,就可以了。#include<stdio.h>#include<stdlib.h>#include<string.h>constintmaxn=1000000;structnode......
  • 最全的“四大天王”合影集(绝对经典…
    他们代表香港娱乐届的最高成就,他们是一代人记忆中的青春见证,他们是影迷歌迷永远不老的偶像。​​1986至1996年间的香港影坛,可谓是电影的十年黄金岁月,的确,在......
  • Mysql容器持续重启You can use the following information to find out 2022-11-30T02
    迁移MySQL容器从一台服务器到另外一台服务器后,容器持续重启,信息如下:2022-11-30T02:14:55.156625218Zmax_threads=5002022-11-30T02:14:55.156628081Zthread_count=020......
  • 【XSY3326】米缸(时间复杂度均衡,线段树,基环树,倍增)
    时间复杂度的均衡。先考虑暴力的想法:显然这是一棵基环树,那么我们每次修改时暴力\(O(nm)\)重构基环树,然后询问的时候就能\(O(1)\)查询。时间复杂度\(O(nmq)\)。考虑......
  • PS新手教程-如何使用PS合成一张和自己合影的相片
    如何使用PS合成一张和自己合影的相片?给大家介绍如何使用PS合成一张和自己合影的相片,一起来看看吧。1、打开PS,导入素材1和素材2图片,将素材2图层复制到→素材1,得到“背景拷贝......
  • github.com[0: 192.30.255.113]: errno=Connection refused
     001、问题  002、解决方法,将git改为https ......