Maksymalna różnica

0

Witam!
Męczę się z tym zadaniem: http://main.edu.pl/pl/user.phtml?op=showtask&task=abs&con=PAS .

Przechodzę wszystkie testy oprócz pierwszego. Błąd jaki się pojawia to "wiersz 1: wczytano '665', a oczekiwano '0'". Skończyły mi się pomysły jakie mogą być inne możliwości. Oto mój kod:

#include <cstdio>

int main()
{
    int n, a, b, c, max, min, wynik;
    scanf("%d", &n);
    if (n==0)
    {
        printf("0");
        return 0;
    }
    scanf("%d", &a);
    if (n==1)
    {
        printf("%d", a);
        return 0;
    }
    scanf("%d", &b);
    if (b>a)
    {
        max=b;
        min=a;
    }
    if (a>b)
    {
        max=a;
        min=b;
    }
    if (a==b)
    {
        max=a;
        min=b;
    }
    for (int i=1;i<=(n-2);i++)
    {
        scanf("%d", &c);
        if (c>max)
           max=c;
        if (c<min)
           min=c;
    }
    wynik=max-min;
    printf("%d", wynik);
    return 0;
}

Z góry dziękuję za pomoc.

0

Nie bardzo rozumiem po co te magiczne ify na początku. Czemu nie wczytasz zwyczajnie tego ciągu, nie wybierzesz max i min i nie wypiszesz wyniku?

0

Dwa pierwsze ify są na wypadek gdyby ilość cyfr w ciągu wynosiła 0 lub 1. Gdy ich nie było był problem z pętlą i wychodziły dziwne rzeczy.

1

Spróbuj postawić znak nowej linii za wynikiem, może o to chodzi (w zadaniu pojawia się słowo "wiersz")...

A z początkiem to faktycznie pojechałeś. Liczb będzie zawsze przynajmniej jedna. Tak więc na początku wczytaj jedną liczbę i przyjmij ją zarówno za min jak i za maks. Dalej leci pętla i wczytywanie kolejnych liczb:

int main()
{
    int n, a;
    scanf("%d%d", &n, &a);
    int min = a, max = a;

    for (int i = 1; i < n; i++)
    {
        //...

No i oprócz instrukcji if ... jest jeszcze if ... else ..., polecam z niej korzystać.

0

Bardzo dziękuję zrobiłem jak mówiłeś:

#include <cstdio>

int main()
{
    int n, a, b, max, min, wynik;
    scanf("%d", &n);
    scanf("%d", &a);
    max=a;
    min=a;
    for (int i=1;i<n;i++)
    {
        scanf("%d", &b);
        if (b>max)
           max=b;
        if (b<min)
           min=b;
    }
    wynik=max-min;
    printf("%d", wynik);
    return 0;
}

I nieszczęsny pierwszy test został zaliczony.
Pytanie tylko, gdzie w tym pierwszym kodzie był błąd?

0
MrMatikm napisał(a):

if (n==1)
{
printf("%d", a);
return 0;
}
Tu powinieneś był wypisać 0. Błąd się wziął z tego, że zakręciłeś początek za bardzo. Jak coś nie działa to trzeba za w szelką cenę zrozumieć dlaczego i poprawić to zamiast omijać problem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1