Biggest of three

Здравейте.

Написал съм по сленият начин задачата: https://pastebin.com/F0s0AQrM, но не получавам никакви точки. “Test case#1- wrong answer; Test case#2- short circuit”
Ако може някой да ми съдейства?

Здравей,
не помня условието на задачата, но предполагам, че не печаташ резултата както се очаква - например, ако резултатът ти е double 5.0 дали се очаква да отпечаташ 5.00 или 5. Погледни това? :slight_smile:

1 Like

Условието:
Write a program that finds the biggest of three numbers that are read from the console.

Input

  • On the first three lines you will receive the three numbers, each on a separate line.

Output

  • On the only output line, write the biggest of the three numbers.

Constraints

  • The three numbers will always be valid floating-point numbers in the range [-200, 200] .

Промених формата на печатане и сега имам 50/100, но пак не мога да намеря къде бъркам (явно аз нещо не декларирам/печатам правилно
import java.util.Scanner;

public class BiggestOfThree {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
double a = Double.parseDouble(scanner.nextLine());
double b = Double.parseDouble(scanner.nextLine());
double c = Double.parseDouble(scanner.nextLine());

    if (a >= -200.00 & a <= 200.00 & b >= -200.00 & b <= 200.00 & c >= -200.00 & c <= 200.00) {
        if (a >= b & a >= c) {
            System.out.printf("%.0f",a);
        } else System.out.printf("%.0f",Math.max(b, c));
    }

}

}

Здравей,
А няма ли примерен инпут/аутпут? В повечето задачи изрично е казано да печаташ например с 2 знака след десетичната запетая.

“%.0f” няма как да ти свърши работа, защото за целите числа ще се държи очаквано, но за double, ще ти ги закъгля до цели и ще води до 100% грешен отговор.

Ако няма указание за печатане, бих заложила, че при инпут 0, 0, 3.5, трябва да отпечаташ “3.5” , а при инпут 0, 0, 3, трябва да отпечаташ “3” (а не “3.0”, както би станало ако го разглеждаш като double, и не “4” както би отпечатал в момента кодът ти).
Това би постигнал с един if/else -> ако числото ти е равно на числото ти, кастнато към int, отпечатай int стойността, else -> отпечатай double стойността.

Здравей,

Аз я реших като първо се въвеждат числата в стрингове и после се парсват за да се сравняват. След като се сравнят отпечатвам стринга, а не парснатото число.

възможно ли е да ми изпратих решението да го разгледам?

Виждам, че бъркам точно в печатането, но не мога да си оправя оутпут-а.
Ако ми помогнеш с кастването ще съм благодарен.

Опитах се, но явно пак бъркам някъде. След съвета за кастването се опитах да нарпавя нещо и получавам 92/100. Ето го и самият код :

Моето решение е страшно идиотско, понеже вероятно ми е било първата решена задача тук изобщо :grin: но накрая съм правила това:
double max >>>

if (max == (int) max) {
System.out.println((int) max);
} else {
System.out.println(max);
}

Дано помага :slight_smile:

Здравейте и аз се мъча със същата задача, може ли малко съвет. В intellij run-вам кода. И всичко е наред, но judge не е съгласен с решението ми.
Ето го кода:
public class Main {
public static void main(String[] args){

  // load  scanner
  Scanner scanner = new Scanner(System.in);
  // read input
  int x1 = scanner.nextInt();
  int x2 = scanner.nextInt();
  int x3 = scanner.nextInt();
  // compare input & print the biggest

   while ((x1>=-200 && x1<=200) && (x2>=-200 && x2<=200) && (x3>=-200 && x3<=200)){
    if (x1>x2 && x2>x3){
        System.out.println(x1);
    } else if (x1<x2 && x2>x3){
        System.out.println(x2);
    } else {
        System.out.println(x3);
    }
    break;
}}}

Здравей,

имаш малко пропуски:

първо (гледайки горните коментари) явно се очакват double, а не int , така че изпускаш част от тестовите случаи, в които не ти подават цели числа и кодът ти гърми (не съм гледала условието, ако са го изменили се извинявам)

Второ, нямаш никъде равенство в if/else-овете, което пак предполага, че ще изтървеш някой случай.
Пробвай примерен вход:
2 1 1
който поради липса на подходящ if, ще влезе чак в else-a и погрешно ще отпечата 1 за резултат.

И последно - този while няма смисъл от него - ти не циклиш нищо, а влизаш еднократно в него. Условието просто уточнява, че зададените числа ще са между -200 и +200 , няма нужда да го валидираш изрично (ако имаше такава нужда, щеше да е указано какво трябва да се случи, ако инпутът не влиза в този range :slight_smile: )

Надявам се да съм била полезна, успех! :slight_smile: