杭电1004——Let the Balloon Rise(让气球起飞)(Java实现)

11 篇文章 0 订阅
Let the Balloon Rise

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 178885 Accepted Submission(s): 71512

Problem Description
Contest time again! How excited it is to see balloons floating around. But to tell you a secret, the judges’ favorite time is guessing the most popular problem. When the contest is over, they will count the balloons of each color and find the result.

This year, they decide to leave this lovely job to you.


Input
Input contains multiple test cases. Each test case starts with a number N (0 < N <= 1000) – the total number of balloons distributed. The next N lines contain one color each. The color of a balloon is a string of up to 15 lower-case letters.

A test case with N = 0 terminates the input and this test case is not to be processed.


Output
For each case, print the color of balloon for the most popular problem on a single line. It is guaranteed that there is a unique solution for each test case.


Sample Input
5
green
red
blue
red
red
3
pink
orange
pink
0

Sample Output
red
pink


在这里插入图片描述
解析:
这道题的要求其实很简单,给定一个数据集的个数,寻找在这个数据集中出现最多的元素(气球的颜色)

一开始的思路是使用数组,但是卡在了类型的问题上(毕竟不是PHP),最后想到了使用自定义类来声明一个自定义类型的数组(C/C++使用的是结构体)

第一步:定义一个自定义类

注意的几个点:

1.因为后续会使用到快排的函数 Arrays.sort(),所以需要做一些必要的操作
	①在自定义类中,重写toString方法:该方法决定输出;
	②该类实现Comparable接口
	③实现接口后,重写compareTo方法:该方法决定排序的根基(Arrays.sort())
	④写明set方法,后续会用到
class Node1 implements Comparable{
    int no=0;
    String name=null;
    public Node1(){
        return;
    }
    public Node1(String name,int no){
        this.name=name;
        this.no=no;
    }

    public void setName(String a){
        name=a;
    }
    public void setNo(int a){
        no=a;
    }

   /*public int compareTo(Object o) {//指定内容升序排序
        if (this.no<((Node1)o).no)
            return -1;
        else if (this.no>((Node1)o).no)
            return 1;
        else return 0;
    }*/
    
    public int compareTo(Object o) {//简化
        return this.no-((Node1)o).no;
    }
    
    public String toString(){
        return this.name;
    }
}

第二步:定义一个自定义类型的数组
注意的几个点:

1.由于是自定义类型所声明的数组,所以不单单数组整体要实例化,数组中每个单位也要实例化;
2.如果没有实例化数组个别单元,会空指针异常的错误(NullPointerException)
3.如果进行自定义类定义的数组元素要进行某个属性的比较,一定要使用equals()方法,不能用比较运算符;
public static void main(String [] args){
        Scanner sc=new Scanner(System.in);//键盘交互输入

        while(true){
            int b=sc.nextInt();//输入元素的个数
            if (b==0) return;
            Node1 [] arry =new Node1[b];//实例化数组

            for (int i=0;i<b;i++){
                arry[i]=new Node1();//实例化数组单元;
                arry[i].setName(sc.next());
                arry[i].no=1;
            }
            for (int i=0;i<b;i++){
                for (int j=i+1;j<b;j++){//不用和本身比较,也不用和自己前面的元素比较
                    //1.不用和本身比较,这个不多说了
                    //2.不用和自己前面的元素,前面的如果有重复于自己的,在之前就会被累计
                    if (arry[i].name.equals(arry[j].name)){
                        arry[i].no++;
                    }
                }

            }

            Arrays.sort(arry,0,b);
            System.out.println(arry[b-1]);

        }

完整代码:

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String [] args){
        Scanner sc=new Scanner(System.in);//键盘交互输入

        while(true){
            int b=sc.nextInt();//输入元素的个数
            if (b==0) return;
            Node1 [] arry =new Node1[b];//实例化数组

            for (int i=0;i<b;i++){
                arry[i]=new Node1();//实例化数组单元;
                arry[i].setName(sc.next());
                arry[i].no=1;
            }
            for (int i=0;i<b;i++){
                for (int j=i+1;j<b;j++){//不用和本身比较,也不用和自己前面的元素比较
                    //1.不用和本身比较,这个不多说了
                    //2.不用和自己前面的元素,前面的如果有重复于自己的,在之前就会被累计
                    if (arry[i].name.equals(arry[j].name)){
                        arry[i].no++;
                    }
                }

            }

            Arrays.sort(arry,0,b);
            System.out.println(arry[b-1]);

        }

    }

    /*public static void show(Node1[] arry){//测试数组排序状态用到的方法
        for (Node1 x: arry) {
            System.out.print(x.no);
            System.out.println(x.name);
        }
    }*/
}
class Node1 implements Comparable{
    int no=0;
    String name=null;
    public Node1(){
        return;
    }
    public Node1(String name,int no){
        this.name=name;
        this.no=no;
    }

    public void setName(String a){
        name=a;
    }
    public void setNo(int a){
        no=a;
    }

    public int compareTo(Object o) {
        return this.no-((Node1)o).no;
    }

    public String toString(){
        return this.name;
    }

}

输出结果:
在这里插入图片描述
最后说一句:还是杭电厉害。

特别鸣谢:橙子小姐姐

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值