1183:病人排队
  • 板块学术版
  • 楼主xinbao324
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/4/21 10:44
  • 上次更新2024/4/21 12:32:55
查看原帖
1183:病人排队
833995
xinbao324楼主2024/4/21 10:44

十分代码,帮忙看看,谢谢! 题目介绍: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

我的错误代码:

#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;
}
2024/4/21 10:44
加载中...