POJ1034

博客主要讨论了如何解决POJ1034题目,指出原问题可以通过排序来解决。作者最初尝试使用冒泡排序,但由于效率问题导致超时,之后改用快速排序方法,成功获得正确答案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

此题其实是考排序,在之初用冒泡排序超出运行时间,所以用快速排序,顺利AC

题目如下:

题目描述:
    浙江桐乡乌镇共有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年浙江大学计算机及软件工程研究生机试真题

代码如下:

import java.util.Scanner;
 
 
public class Main {
    public static void main(String[] args) {
        Scanner cin = new Scanner(System.in);
         
        while (cin.hasNext()) {
            int n = cin.nextInt();
            int m = cin.nextInt();
             
            if (n == 0 && m == 0)
                break;
             
            int[] a = new int[n];
             
            for (int i = 0; i < n; i ++) {
                a[i] = cin.nextInt();
            }
             
            if (n < m) {
                for (int i = 0; i < n; i ++) {
                    if (i != n - 1)
                        System.out.print(a[i] + " ");
                    else
                        System.out.print(a[i]);
                }
            }
            else {
                quickSort(a, 0, a.length - 1); 
 
                for (int i = 0; i < m; i ++) {
                    if (i != m - 1) {
                        System.out.print(a[i] + " ");                       
                    }
                    else
                        System.out.print(a[i] + "\n");
                }
            }
        }
    }
    //快速排序
    private static void quickSort(int[] array, int from, int to) {
         if (from < to) { 
                int temp = array[to]; 
                int i = from - 1; 
                for (int j = from; j < to; j++) { 
                    if (array[j] >= temp) { 
                        i++; 
                        int tempValue = array[j]; 
                        array[j] = array[i]; 
                        array[i] = tempValue; 
                    } 
                } 
                array[to] = array[i+1]; 
                array[i+1] = temp; 
                quickSort(array, from, i); 
                quickSort(array, i + 1, to); 
            } 
    }
}
 
/**************************************************************
    Problem: 1034
    User: mchenyuxiang
    Language: Java
    Result: Accepted
    Time:1370 ms
    Memory:81784 kb
****************************************************************/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值