排队IV

题目描述:
在很多场合,我们都需要排队,比如超市付款,医院看病,就餐等等。“尊老爱幼”是中华名族的传统美德,所以在排队的过程中,遇到老人、幼儿我们应该主动让他们排在前面。请按以下 4 条规则编写一个排队的程序。

(1)老人(年龄 ≥ 60 岁)和幼儿(年龄 ≤ 6 岁)比其他人(6 岁 < 年龄 < 60 岁)优先排在队伍的前面,且所有幼儿排在所有老人的前面。

(2)老人按年龄从大到小的顺序排队,年龄大的优先,年龄相同时,先到的人排在前面。

(3)幼儿按年龄从小到大的顺序排队,年龄小的优先,年龄相同时,先到的人排在前面。

(4)其他人只按到达的先后顺序排队。

输入输入共n+1行。

第1行一个整数n,表示排队的总人数。

第2行到第n+1行,按照到达的先后顺序给出了每个人的基本信息。每行两个整数,第一个整数表示这个人的编号(编号保证不会重复,但不保证连续),第二个整数表示这个人的年龄。

输出输出共n行。

每行一个人的编号,表示从前往后的排队结果。

Thought:比较简单的一道题。

#include<stdio.h>
#include<string.h>
struct per
{    int ID;    int age;};
int main()
{    
      struct per a[30005],c[30000],d[30000],tmp,b[30000];
          int i,j,temp,n,e,f,g; 
             while(~scanf("%d",&n)) 
         {       
                 e=f=g=0; 
               for(i=0;i<n;i++) 
               scanf("%d%d",&a[i].ID,&a[i].age);
                 for(i=0;i<n;i++)  
                           {        
                                   if(a[i].age<=6) 
b[e++]=a[i];        
 else if(a[i].age>=60)        
     c[f++]=a[i];         
     else d[g++]=a[i];     
            }          
       for(i=0;i<e-1;i++)       
              {           
           for(j=0;j<e-i-1;j++)        
              if(b[j].age>b[j+1].age){           
                         tmp=b[j+1];          
                       b[j+1]=b[j];          
                               b[j]=tmp;}        
                                           }         
                                       for(i=0;i<f-1;i++)  
                                        {         
                            for(j=0;j<f-i-1;j++)    
                          if(c[j].age<c[j+1].age){     
                                        tmp=c[j+1];        
                                          c[j+1]=c[j];   
                                       c[j]=tmp;}    
                                              }       
                                   for(i=0;i<e;i++)      
                                         a[i]=b[i];    
                                              j=0;        
                                           for(i=e;i<f+e;i++)           
                                         a[i]=c[j++];         
                                          j=0;         
                                         for(i=f+e;i<n;i++)     
                                      a[i]=d[j++];        
                                         for(i=0;i<n;i++)      
                                                  printf("%d\n",a[i].ID);   
                                                  }    
                                          return 0;}

猜你喜欢

转载自blog.csdn.net/weixin_43871781/article/details/84892166
IV