所有员工年龄排序

时间限制:1 秒内存限制:32 兆特殊判题:

题目描述:

公司现在要对所有员工的年龄进行排序,因为公司员工的人数非常多,所以要求排序算法的效率要非常高,你能写出这样的程序吗? 

输入:

输入可能包含多个测试样例,对于每个测试案例,

输入的第一行为一个整数n(1<= n<=1000000):代表公司内员工的人数。

输入的第二行包括n个整数:代表公司内每个员工的年龄。其中,员工年龄age的取值范围为(1<=age<=99)。 

输出:

对应每个测试案例,

请输出排序后的n个员工的年龄,每个年龄后面有一个空格。 

样例输入:
5
43 24 12 57 45
样例输出:
12 24 43 45 57

还是华丽的Time Limit Exceed

 1 #include <iostream>
 2 using namespace std;
 3 
 4 int main()
 5 {
 6 int n,i,a,j;
 7     int age[100]={0};
 8 
 9     while(cin>>n)
10     {
11         for (i=0; i<n; i++)
12         {
13             cin>>a;
14             age[a]++;
15         }        
16 
17         for (i=1; i<=99; i++)
18         {
19             j=age[i];
20             for (; j>0; j--)
21             {
22                 cout<<i<<" ";
23             }
24             
25             age[i] = 0;
26         }
27         cout<<endl;
28 
29     }
30     return 0;
31 }

改:

 1 #include <iostream>
 2 #include <stdlib.h>
 3 #include <cstring>
 4 using namespace std;
 5 
 6 int main()
 7 {
 8 int n,i,a,j,cnt;
 9     int age[100]={0};
10 
11     while(cin>>n)
12     {
13                 memset(age, 0, sizeof(int)*100);
14         for (i=0; i<n; i++)
15         {
16             cin>>a;
17             age[a]++;
18         }        
19 
20         for (i=1; i<=99; i++)
21         {
22             j=age[i];
23             cnt +=age[i];
24 
25             for (; j>0; j--)
26             {
27                 cout<<i<<" ";
28             }
29             if (cnt==n)
30             {
31                 break;
32             }
33         }
34             
35         cout<<endl;
36 
37     }
38     return 0;
39 }

还是,闷。。。

网上抄了一份:

#include<stdio.h>  
#include<string.h>  
  
int ages[1000001];//年龄数组  
  
int main(){  
    int n,i,j,index;  
    const int oldestAge = 100;  
    int CountAge[oldestAge];//每一个年龄的人数  
    while(scanf("%d",&n) != EOF){  
        //初始化  
        for(i = 0;i <= oldestAge;i++){  
            CountAge[i] = 0;  
        }  
        //输入年龄  
        for(i = 0;i < n;i++){  
            scanf("%d",&ages[i]);  
            //统计每一个年龄的人数  
            CountAge[ages[i]] ++;  
        }  
        //排序  
        for(i = 0;i < oldestAge;i++){  
            for(j = 0;j < CountAge[i];j++){  
                printf("%d ",i);  
            }  
        }  
        printf("\n");  
    }  
    return 0;  
}  

Accept!!!

为毛过不了,谁能告诉我~~~

改。

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <cstring>
 4 using namespace std;
 5 
 6 int main()
 7 {
 8 int n,i,a,j,cnt;
 9     int age[100]={0};
10        //int tmp[1000001];
11    
12 
13     while(cin>>n)
14     {
15                 memset(age, 0, sizeof(int)*100);
16         for (i=0; i<n; i++)
17         {
18             cin>>a;  //就这里导致了超时!!!!!
19 20 age[a]++; 21 } 22 23 for (i=1; i<=99; i++) 24 { 25 j=age[i]; 26 cnt +=age[i]; 27 28 for (; j>0; j--) 29 { 30 printf("%d ",i); 31 } 32 if (cnt==n) 33 { 34 break; 35 } 36 } 37 38 cout<<endl; 39 40 } 41 return 0; 42 }

结论就是那个ACM系统的cin和cout效率要比scanf和printf要低~~~

posted @ 2013-03-27 10:25  legendmaner  阅读(584)  评论(0编辑  收藏  举报