ACM-ICPC 7384编程挑战

时间:2017-03-16 01:07:29

标签: java

我正在尝试解决热门投票问题,但我收到运行时错误并且不知道为什么,我真的很感激帮助。如果所有候选人都有相同的票数,基本上我的解决方案是获得总票数;那么就没有赢家,否则我会计算获胜者获得的选票百分比,以便了解他是否占多数或少数赢家。

import java.util.Scanner;


class popular {
 public static void main(String[] args) {
     Scanner s = new Scanner(System.in);
     int n, suma, mayoria;
     int casos=s.nextInt();
     int cont=0;
     int ganador=0;
     float num=0;
     while(cont!=casos){
         n=s.nextInt();
         int votos[]= new int[n];
         for (int i = 0; i < n; i++) {
            votos[i] = s.nextInt();
        }
         suma=sumar(votos);
         if(suma==-1){
             System.out.println("no winner");
         }
         else{
             ganador=ganador(votos, suma);
             num=(float)votos[ganador]/(float)suma;
             if( num> 0.5){
                 System.out.println("majority winner "+(ganador+1));
             }
             else{
                 System.out.println("minority winner "+(ganador+1));
            }  
         }
         cont++;
         ganador=0;

     }
 }

 public static int sumar(int arreglo[]){
     int resp1=-1, resp=0;
     int temp=arreglo[0];
     boolean sol=true;
     for (int i = 0; i < arreglo.length; i++) {
         resp=resp+arreglo[i];
         if(temp!=arreglo[i]){
             sol=false;
         }
     }
     if(sol==false){
         return resp;
     }
     return resp1;
 }

 public static int ganador(int arreglo[], int suma){
     int mayor=0;
     int ganador=0;
     for (int i = 0; i < arreglo.length; i++) {
         if(arreglo[i]>mayor){
             mayor=arreglo[i];
             ganador=i;
         }
     }
     return ganador;
 }

}

1 个答案:

答案 0 :(得分:0)

我已将您的代码提交给OJ,但我没有收到运行时错误,但是我收到了编译错误。我必须弄清楚你的代码中存在一些问题。首先,如果要向OJ提交Java代码,则需要将公共类命名为Main而不是流行或其他。其次,您的代码逻辑不正确。假设一个测试用例:

4 
1
1
2
2

您的计划将打印&#34;少数族裔获胜者3&#34;但它应该是&#34;没有赢家&#34;。

以下是您的修改后的源代码(您可以接受此代码):

import java.util.Scanner;


class Main {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        int n, suma, mayoria;
        int casos = s.nextInt();
        int cont = 0;
        int ganador = 0;
        float num = 0;
        while (cont != casos) {
            n = s.nextInt();
            int votos[] = new int[n];
            for (int i = 0; i < n; i++) {
                votos[i] = s.nextInt();
            }

            ganador = findMaximum(votos);

            if (getMaximumCount(votos, votos[ganador]) > 1) {
                System.out.println("no winner");
            } else {
                suma = sumOf(votos);
                if (votos[ganador] * 2 > suma) {
                    System.out.println("majority winner " + (ganador + 1));
                } else {
                    System.out.println("minority winner " + (ganador + 1));
                }
            }
            cont++;
            ganador = 0;
        }
    }

    private static int sumOf(int[] arreglo) {
        int sum = 0;
        for (int x : arreglo) {
            sum += x;
        }
        return sum;
    }

    private static int getMaximumCount(int[] arreglo, int maximum) {
        // Check if there are more than one items have the maximum value
        int count = 0;
        for (int x : arreglo) {
            if (x == maximum) {
                count++;
            }
        }
        return count;
    }

    private static int findMaximum(int[] arreglo) {
        int x = 0, pos = 0;
        for (int i = 0; i < arreglo.length; i++) {
            if (x < arreglo[i]) {
                x = arreglo[i];
                pos = i;
            }
        }
        return pos;
    }
}

希望它可以帮到你!