Софтуерно Инженерство
Loading...
+ Нов въпрос
VladoGenov avatar VladoGenov 45 Точки

[Exercises] - Coding-101 - Simple Loops - Exercise 18 (Equal Pairs)

Здравейте, колеги!
Условието на задачата е: Дадени са 2*n числа. Първото и второто формират двойка, третото и четвъртото също и т.н. Всяка двойка има стойност – сумата от съставящите я числа. Напишете програма, която проверява дали всички двойки имат еднаква стойност или печата максималната разлика между две последователни двойки. Ако всички двойки имат еднаква стойност, отпечатайте "Yes, value=…" + стойността. В противен случай отпечатайте "No, maxdiff=…" + максималната разлика.
Имам проблем с Judge, дава ми 87 точки и в един от тестовете, очаква изход 88, а реалния изход трябва да е 145.
Сметнах го и ръчно, би трябвало макс. разлика да е 145, тъй като сумата на най-малката двойка е 0, а сумта на най-голямата е 145.
Ето и кода, който тествам (с печат на контролни суми): Code in Pastebin
Линка на задачата в Judge: Exercise 18  (Equal Pairs)
Проблема е само при този тест на Judg-а:
n=7
------
34
-33    sum=1
------
52
12    sum=64
------
-32
32    sum=0 (най-малката сума)
------
23
41    sum=64
------
7
25    sum=32
------
34
23    sum=57
------
124
21    sum=145 (най-голямата сума)
MaxDifferences=145-0=145 (а не 88 ???)

The user output text does not contain the expected output text.
Expected output: no maxdiff 88
Your output: no maxdiff 145
-------
Какъв може да е проблема? Аз ли бъркам някъде или в Judge-а този пример е зададен некоректно?
IskrenPenev avatar IskrenPenev 177 Точки

Дадени са 2*n числа. Първото и второто формират двойка, третото и четвъртото също и т.н. Всяка двойка има стойност – сумата от съставящите я числа. Напишете програма, която проверява дали всички двойки имат еднаква стойност или печата максималната разлика между две последователни двойки.

Не си обърнал внимание на това в условието. Няма грешка в тестовете :P

Ето го моето решение http://pastebin.com/cePkyXRD

1
VladoGenov avatar VladoGenov 45 Точки

Благодаря, колега! 
Наистина относно разликата съм пропуснал да забележа в условието думата "последователни", което ообяснява проблема.
Аз съм решил по-сложният вариант smiley, който обаче се оказва, че не е в условието.

0
Daniel.Pavlov avatar Daniel.Pavlov 6 Точки

Здравей колега! Забелязох, че това решение не е правилно дори и Judge да го приема, тъй като трябва да се посочи сумата от всички двойки дали е равна, а не само на последните две двойки. При такъв вход примерно:

4
1
1
2
1
3
3
3
3

Изкарва изход:

Yes, value=6.00

Имаш ли някакви други идеи как да я оправим?

Благодаря :)

0
Daniel.Pavlov avatar Daniel.Pavlov 6 Точки

Здравей отново! Видях къде е проблема. На последния If трябва да е: 

if (maxDiff == 0 || n == 1){
    System.out.printf("Yes, value=%.2f", currSum);
}else {
    System.out.printf("No, maxdiff=%.2f", maxDiff);

Вместо 

if (prevSum == currSum || n == 1){
    System.out.printf("Yes, value=%.2f", currSum);
}else {
    System.out.printf("No, maxdiff=%.2f", maxDiff);
}
0