病人排队(信息学奥赛一本通-T1183)
生活随笔
收集整理的這篇文章主要介紹了
病人排队(信息学奥赛一本通-T1183)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【題目描述】
病人登記看病,編寫一個程序,將登記的病人按照以下原則排出看病的先后順序:
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
102012
【源程序】
#include<iostream> #include<cstdio> #include<cstring> using namespace std; struct node{char id[20];int age;int seq; }a[110],b[110],temp; int main() {int n,d;char s[20];int p=0,q=0,k=0;int i,j;cin>>n;for(i=1;i<=n;i++){cin>>s>>d;k++;if(d>=60){strcpy(a[p].id,s);a[p].age=d;a[p].seq=k;p++;}else{strcpy(b[q].id,s);b[q].age=d;b[q].seq=k;q++;}}for(i=0;i<p;i++)for(j=i+1;j<p;j++)if(a[i].age<a[j].age){temp=a[i];a[i]=a[j];a[j]=temp;}else if(a[i].age==a[j].age&&a[i].seq>a[j].seq){temp=a[i];a[i]=a[j];a[j]=temp;}for(i=0;i<q;i++)for(j=i+1;j<q;j++)if(b[i].seq>b[j].seq){temp=b[i];b[i]=b[j];b[j]=temp;}for(i=0;i<p;i++)cout<<a[i].id<<endl;for(i=0;i<q;i++)cout<<b[i].id<<endl;return 0; }?
總結
以上是生活随笔為你收集整理的病人排队(信息学奥赛一本通-T1183)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 01迷宫(洛谷-P1141)
- 下一篇: 最短网络(信息学奥赛一本通-T1350)