寻找大富翁

题目描述:
    浙江桐乡乌镇共有n个人,请找出该镇上的前m个大富翁.
输入:
    输入包含多组测试用例.
    每个用例首先包含2个整数n(0<n<=100000)和m(0<m<=10),其中: n为镇上的人数,m为需要找出的大富翁数, 接下来一行输入镇上n个人的财富值.
    n和m同时为0时表示输入结束.
输出:
    请输出乌镇前m个大富翁的财产数,财产多的排前面,如果大富翁不足m个,则全部输出,每组输出占一行.
样例输入:
3 1
2 5 -1
5 3
1 2 3 4 5
0 0
样例输出:
5
5 4 3

  1 #include <iostream>
  2 #include <cstdio>
  3 #include <cstdlib>
  4 #include <cstring>
  5 #include <cmath>
  6 #include <cctype>
  7 #include <vector>
  8 #include <list>
  9 #include <deque>
 10 #include <stack>
 11 #include <queue>
 12 #include <map>
 13 #include <set>
 14 #include <string>
 15 #include <algorithm>
 16 
 17 
 18 using namespace std;
 19 
 20 
 21 int a[10000];
 22 int vis[10000];
 23 
 24 
 25 
 26 
 27 int main()
 28 {
 29 
 30 
 31     int n;
 32     int i,j,k;
 33 
 34     while(scanf("%d",&n)!=EOF)
 35     {
 36         if(n==0)
 37             break;
 38 
 39         for(i=0;i<n;i++)
 40             scanf("%d",&a[i]);
 41 
 42         for(i=0;i<n;i++)
 43             vis[i]=0;
 44 
 45 
 46         for(i=0;i<n;i++)
 47         {
 48 
 49             k=a[i];
 50 
 51             while(k!=1)
 52             {
 53                 if(k%2==0)
 54                 {k/=2;
 55 
 56                       for(j=0;j<n;j++)
 57                     {
 58                         if(a[j]==k)
 59                         vis[j]=1;
 60                     }
 61 
 62                 
 63                 
 64                 }
 65                 else
 66                 {
 67                     k=3*k+1;
 68 
 69                     k/=2;
 70 
 71                        for(j=0;j<n;j++)
 72                     {
 73                         if(a[j]==k)
 74                         vis[j]=1;
 75                     }
 76 
 77 
 78                 }
 79             }
 80         }
 81 
 82         int tag=0;
 83 
 84         for(i=n-1;i>=0;i--)
 85         {
 86             if(vis[i]==0)
 87             {
 88                 if(tag==0)
 89                 {    printf("%d",a[i]);tag=1;}
 90                 else
 91                     printf(" %d",a[i]);
 92             }
 93         }
 94 
 95         puts("");
 96     }
 97 
 98             
 99 
100 
101 
102 
103     return 0;
104 }

 

posted @ 2012-05-30 20:41  cseriscser  阅读(381)  评论(0编辑  收藏  举报