社区讨论

1183:病人排队

学术版参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@lv8xe9np
此快照首次捕获于
2024/04/21 10:45
2 年前
此快照最后确认于
2024/04/21 12:32
2 年前
查看原帖
十分代码,帮忙看看,谢谢! 题目介绍:1183:病人排队
时间限制: 1000 ms 内存限制: 65536 KB 提交数:47350 通过数: 20801 【题目描述】 病人登记看病,编写一个程序,将登记的病人按照以下原则排出看病的先后顺序:
1.老年人(年龄 ≥60 岁)比非老年人优先看病。
2.老年人按年龄从大到小的顺序看病,年龄相同的按登记的先后顺序排序。
3.非老年人按登记的先后顺序看病。
【输入】 第1行,输入一个小于100 的正整数,表示病人的个数;
后面按照病人登记的先后顺序,每行输入一个病人的信息,包括:一个长度小于10 的字符串表示病人的ID(每个病人的ID各不相同且只含数字和字母),一个整数表示病人的年龄,中间用单个空格隔开。
【输出】 按排好的看病顺序输出病人的ID,每行一个。
【输入样例】 5 021075 40 004003 15 010158 67 021033 75 102012 30 【输出样例】 021033 010158 021075 004003
我的错误代码:
CPP
#include<bits/stdc++.h>
using namespace std;
int b[100000],c[100000];
string a[100000];
int sum,num;
int l[10000000],s[1000000];
int main(){
	int n;
	cin >> n;
	for(int i=0;i<n;i++){
		cin >> a[i] >> b[i];
		c[i]=i;
	}
	for(int i=0;i<n;i++){
		if(b[i]>=60){
			l[sum]=c[i];
			sum++;
		}
		else{
			s[num]=c[i];
			num++;
		}
	}

		for(int j=0;j<sum;j++){
			if(b[l[j]]<b[l[j+1]]){
				swap(l[j],l[j++]);
			}
		}
	
	for(int i=0;i<sum;i++){
		cout << a[l[i]] << endl;
	}
	for(int i=0;i<num;i++){
		cout << a[s[i]] << endl;
	}
	return 0;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...