社区讨论
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 条回复,欢迎继续交流。
正在加载回复...