Min,Max,Sum and Average

Здравейте,

При тази задача: https://learn.telerikacademy.com/mod/page/view.php?id=4848
Получавам 40 точки с този код: https://pastebin.com/YWShB8fF
Проблема е, че не мога да разбера какво не е наред с кода.

Здравей,

Това, което виждам на пръв поглед е че не правиш проверки за това дали N и числата са в дадения в условието интервал.

Здрасти,

Не мисля, че проблема е в това.

Имаше малък проблем със форматирането и със сбора. Въпреки че в условието пише че всички дадени цифри ще бъдат integers, като се загледах в отговорите които дава от judge системата се вижда че повечето от тях не са изобщo integers а са floating point numbers. Сбора ти беше float, а от системата получаваше doubles. Това става проблем когато събираш doubles които имат по-голяма точност след десетичната запетая във float, които имат по-малка точност. На теория разликата е малка, но за системата която гледа всеки символ е достатъчно да даде грешка. Във форматирането не съм изцяло сигурен какъв беше проблема, не ми се занимаваше да преглеждам всеки символ понеже не съм много наясно с този начин на форматиране в Java, но ти беше декларирал DecimalFormat, но не го използваше. Просто гугълнах набързо как да го използвам и след това работеше перфектно =) Ето кода : https://pastebin.com/cCyEvTpt

1 Like

Благодаря много за доброто обяснение и за помощта!

1 Like

какво не е наред в кода ми. InteliJ го смята перфектно но Judge ми дава 0.
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
double n = Double.parseDouble(scanner.nextLine());
double sum = 0;
double avg = 0;

    double min = Double.MAX_VALUE;
    double max = Double.MIN_VALUE;

    for (int i = 1; i <= n; i++) {
        double num = Double.parseDouble(scanner.nextLine());

        if (num > max) {
            max = num;
        }
        if (num < min) {

            min = num;
        }

            sum = sum + num;
            avg = sum / n;
        }

        System.out.printf("min %.2f%n", min);
        System.out.printf("max %.2f%n", max);
        System.out.printf("sum %.2f%n", sum);
        System.out.printf("average %.2f%n", avg);
    }
}

От този код няма ли да ти принтира “min 1.00”? В sample output на задачата пише че трябва да е “min=1.00”, т.е. липсва равното

Видях и го коригирах с = но пак ми дава 0 точки.

Искаш ли да погледнеш моето решение?

import java.util.Scanner;

public class Main {

private static final String MIN_PRINT_TEMPLATE = "min=%.2f";
private static final String MAX_PRINT_TEMPLATE = "max=%.2f";
private static final String SUM_PRINT_TEMPLATE = "sum=%.2f";
private static final String AVERAGE_PRINT_TEMPLATE = "avg=%.2f";

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);

    int number = Integer.parseInt(scanner.nextLine());
    double[] numbersArray = new double[number];

    for (int index = 0; index < number; index++) {
        numbersArray[index] = Double.parseDouble(scanner.nextLine());
    }

    double minNumber = 1001;
    for (int i = 0; i < numbersArray.length; i++) {
        if (numbersArray[i] < minNumber) {
            minNumber = numbersArray[i];
        }
    }
    System.out.printf(MIN_PRINT_TEMPLATE, minNumber).println();

    double maxNumber = -1001;
    for (int i = 0; i < numbersArray.length; i++) {
        if (numbersArray[i] > maxNumber) {
            maxNumber = numbersArray[i];
        }
    }
    System.out.printf(MAX_PRINT_TEMPLATE, maxNumber).println();

    double sum = 0.0;
    for (int i = 0; i < numbersArray.length; i++) {
        sum += numbersArray[i];
    }
    System.out.printf(SUM_PRINT_TEMPLATE, sum).println();
    
    System.out.printf(AVERAGE_PRINT_TEMPLATE, sum / number).println();
}

}

@sasho_kamenov

оправи и average да е “avg”

благодаря много :slight_smile: