string表示的数字不能直接比较 PAT 7-27 宿舍谁最高?

题面

在这里插入图片描述

输入样例

7
000000 Tom 175 120
000001 Jack 180 130
000001 Hale 160 140
000000 Marry 160 120
000000 Jerry 165 110
000003 ETAF 183 145
000001 Mickey 170 115

输出样例

000000 Tom 175 120
000001 Jack 180 130
000003 ETAF 183 145

常规做法

按宿舍号排序,同宿舍号放在一起
遍历整个序列,同宿舍号的比较身高,维护最大身高
出现不同宿舍号,最大身高入队,更新最大身高

#include<iostream>
#include<algorithm>
#include<string>
#include<queue>
using namespace std;
struct stu{
	string no;
	string name;
	int h;
	int w;
};
queue<stu> ans;
bool is(string s1,string s2){//string can't compared straight,despites their lenght are equal
	if(s1.length() == s2.length()){
		return s1<s2;
	}else{
		return s1.length()<s2.length();
	}
}
bool cmp0(stu s1,stu s2){
	if(is(s1.no,s2.no)){
		return true;
	}
	return false;
}

int main()
{
	int n;
	cin >> n;
	stu st[n];
	//输入 
	for(int i=0;i<n;i++){
		cin >> st[i].no >> st[i].name >> st[i].h >> st[i].w;
	}
	//处理 
	sort(st,st+n,cmp0);
	stu tmp = st[0];
	for(int i=0;i<n;i++){
		if(st[i].no == tmp.no){
			if(st[i].h>tmp.h){
				tmp = st[i];
			}
		}else{
			ans.push(tmp);
			tmp = st[i];	
		}if(i==n-1){
			ans.push(tmp);
		}
	} 
	//输出 
	while(ans.size()){
		int k = 6-ans.front().no.length();//输出补0 
		while(k--){
			cout << "0";
		}
		cout<<ans.front().no<<" "<<ans.front().name<<" "<<ans.front().h<<" "<<ans.front().w;
		ans.pop();
		if(ans.size()){
			cout << endl;
		}
	}
	
	return 0;
}
注意点
  • 用string表示的数字不能直接比较,如9和123比较,“9”>“123”。有两个选择:
    (1)直接用int读取,在范围内有效。注意宿舍号的范围是[0,999999]。而不是[000000,999999]。(题目的输入样例太有迷惑性了,还是我太菜了…)但是要注意输出时补0。
    (2)用string,增加一个比较函数
//string can't compared straight,despites their lenght are equal
bool is(string s1,string s2){
	if(s1.length() == s2.length()){
		return s1<s2;
	}else{
		return s1.length()<s2.length();
	}
}
用int存宿舍号
用map存放
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值