信息学奥赛一本通(1183:病人排队)
1183:病人排隊(duì)
時(shí)間限制: 1000 ms ??? ??? 內(nèi)存限制: 65536 KB
提交數(shù): 17345 ??? 通過數(shù): 7284
【題目描述】
病人登記看病,編寫一個(gè)程序,將登記的病人按照以下原則排出看病的先后順序:
1.老年人(年齡 >= 60歲)比非老年人優(yōu)先看病。
2.老年人按年齡從大到小的順序看病,年齡相同的按登記的先后順序排序。
3.非老年人按登記的先后順序看病。
【輸入】
第1行,輸入一個(gè)小于100的正整數(shù),表示病人的個(gè)數(shù);
后面按照病人登記的先后順序,每行輸入一個(gè)病人的信息,包括:一個(gè)長(zhǎng)度小于10的字符串表示病人的ID(每個(gè)病人的ID各不相同且只含數(shù)字和字母),一個(gè)整數(shù)表示病人的年齡,中間用單個(gè)空格隔開。
【輸出】
按排好的看病順序輸出病人的ID,每行一個(gè)。
【輸入樣例】
5 021075 40 004003 15 010158 67 021033 75 102012 30【輸出樣例】
021033 010158 021075 004003 102012【參考代碼】
#include <stdio.h>
#define N 20
struct node
{
?? ?char s[N]; ? //病人id?
?? ?int age; ? ? //病人年齡
?? ?int que; ? ? //病人順序?
}pat[100],t;
void cmpsort(int n)
{
?? ?int i,j;
?? ?int case1,case2,case3,case4;
?? ?for(i=0;i<n-1;i++)
?? ?{
?? ??? ?for(j=i+1;j<n;j++)
?? ??? ?{
?? ??? ??? ?case1=pat[i].age<60 && pat[j].age>=60;
?? ??? ??? ?case2=pat[i].age>=60 && pat[j].age>=60 && pat[i].age<pat[j].age;
?? ??? ??? ?case3=pat[i].age>=60 && pat[j].age>=60 && pat[i].age==pat[j].age && pat[i].que>pat[j].que;
?? ??? ??? ?case4=pat[i].age<60 && pat[j].age<60 && pat[i].que>pat[j].que;
?? ??? ??? ?if(case1 || case2 || case3 || case4)
?? ??? ??? ?{
?? ??? ??? ??? ?t=pat[i];
?? ??? ??? ??? ?pat[i]=pat[j];
?? ??? ??? ??? ?pat[j]=t;
?? ??? ??? ?}
?? ??? ?}
?? ?}
}
int main()
{
?? ?int i,k=1,n;
?? ?scanf("%d",&n);
?? ?for(i=0;i<n;i++)
?? ?{
?? ??? ?scanf("%s %d",pat[i].s,&pat[i].age);
?? ??? ?pat[i].que=k;
?? ??? ?k++;
?? ?}
?? ?
?? ?cmpsort(n);
?? ?
?? ?for(i=0;i<n;i++)
?? ??? ?printf("%s\n",pat[i].s);
?? ?
?? ?return 0;
}
http://ybt.ssoier.cn:8088/problem_show.php?pid=1183
?
總結(jié)
以上是生活随笔為你收集整理的信息学奥赛一本通(1183:病人排队)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 好的程序员就应该有强迫症
- 下一篇: 信息学奥赛一本通 1956:【11NOI