• 九度oj 题目1034:寻找大富翁


    题目链接:http://ac.jobdu.com/problem.php?pid=1034

    题目描述:
        浙江桐乡乌镇共有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

    来源:2009年浙江大学计算机及软件工程研究生机试真题

    这个题目比较简单,思路:

    如果n<=m则输入n个数到数组中,然后降序排序,接着直接输出;

    若是n>m,则先输入前m个数到数组中。然后当每次输入一个数temp,则判断temp是否比数组中最小的数min大,若是则覆盖掉数组中最小数字min,否则跳过,输入下一个,然后继续……

    输入并处理完成后,降序排序,然后输出即可。

    代码如下:

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 int cmp(const void *a,const void *b)
     4 {
     5     return *(int*)b- *(int *)a;
     6 }
     7 int finMinIndex(int a[],int len);//返回a数组最小元素的下标。a数组元素个数为len 
     8 int main()
     9 {
    10     int n,m;
    11     int a[11]={0};
    12     int i;
    13     int mini;
    14     int temp;
    15     
    16     while(scanf("%d%d",&n,&m)!=EOF)
    17     {
    18         if(n==0&&m==0) break;
    19         if(n<=m)
    20         {
    21             for(i=0;i<n;i++)    scanf("%d",&a[i]);
    22             qsort(a,n,sizeof(a[0]),cmp);
    23             printf("%d",a[0]);
    24             for(i=1;i<n;i++)    printf(" %d",a[i]);
    25             printf("
    ");
    26         }
    27         else
    28         {
    29             for(i=0;i<m;i++)
    30             {
    31                 scanf("%d",&a[i]);
    32             }
    33             for(i=m;i<n;i++)
    34             {
    35                 scanf("%d",&temp);
    36                 mini=finMinIndex(a,m);
    37                 if(temp>a[mini]) a[mini]=temp;
    38             }
    39             qsort(a,m,sizeof(a[0]),cmp);
    40             printf("%d",a[0]);
    41             for(i=1;i<m;i++)    printf(" %d",a[i]);
    42             printf("
    ");
    43         }
    44     }
    45     return 0;
    46 }
    47 int finMinIndex(int a[],int len)//返回a数组最小元素的下标。a数组元素个数为len 
    48 {
    49     int i,minIndex=0;
    50     for(i=1;i<len;i++)
    51     {
    52         if(a[i]<a[minIndex]) minIndex=i;
    53     }
    54     return minIndex;
    55 }
  • 相关阅读:
    Abp Hangfire 占用 PostgreSql 连接数的另类解决方案
    Git 仓库中文件大小写重命名实践(Windows 环境)
    C# WinForm 文件夹选择控件 folderBrowserDialog 的应用实例
    使用 C# 修改文件创建时间(图片也可修改)
    ABP 在 EntityFramework 中使用扩展批量更新时的异常
    Visual Studio之“生成事件”实践
    博客专家纪念
    深入浅出-应用服务
    如何管理 .NET Core 工具
    深入浅出-可定制仓储设计
  • 原文地址:https://www.cnblogs.com/huashanqingzhu/p/4388490.html
Copyright © 2020-2023  润新知