Jak działa spoje?

2018-11-01 17:25
Kaczka Pytek
0

Link do zadania: https://www.spoj.com/submit/TEST/id=22622268
Dostałem zadanie na spoje (TEST - Life, the Universe, and Everything) typu:

Input:

1
2
88
42
99

Output:

1
2
88

Gdy trafisz na 42 wyjdz. Wykonałem je w c# w bardzo pokrecony sposob. Poniższy kod mi działa, ale na spoje nie przechodzi testcasow. Pytanie dlaczego? Nie rozumiem tego systemu.

using System;

public class Solution
{
    public static void Main()
    {
        int r1 = Convert.ToInt32(Console.ReadLine());
        int r2 = Convert.ToInt32(Console.ReadLine());
        int r3 = Convert.ToInt32(Console.ReadLine());
        int r4 = Convert.ToInt32(Console.ReadLine());
        int r5 = Convert.ToInt32(Console.ReadLine());

        for (int i = 0; i < 5; i++)
        {
            if (r1 == 42)
            {
                break;
            }
            else
            {
                Console.WriteLine(r1);
            }

            if (r2 == 42)
            {
                break;
            }
            else
            {
                Console.WriteLine(r2);
            }

            if (r3 == 42)
            {
                break;
            }
            else
            {
                Console.WriteLine(r3);
            }

            if (r4 == 42)
            {
                break;
            }
            else
            {
                Console.WriteLine(r4);
            }

            if (r5 == 42)
            {
                break;
            }
            else
            {
                Console.WriteLine(r5);
            }

        }

        Console.ReadKey();
    }
}
edytowany 1x, ostatnio: furious programming, 2018-11-01 20:11
Weź jakiś tutorial i Poczytaj (Zwróć uwagę na pętle). - lion137 2018-11-01 18:11
Na SPOJ-u, nie na żadne spoje… :| - furious programming 2018-11-01 20:12

Pozostało 580 znaków

2018-11-01 17:33
1

Żartujesz prawda? A co jak liczba 42 będzie szósta liczbą?

Albo 36??? :-) - leonpro778 2018-11-01 18:41

Pozostało 580 znaków

2018-11-01 19:21
0

Żal komentować Twój kod. Przeczytaj kilka pierwszych rozdziałów jakiejś książki o C# dla początkujących i wtedy wróć do zadania. Postaraj się zredukować kod w metodzie Main do 3 linii (nie licząc pustych linii i klamer dla pętli).

Wskazówki:

  • Porównuj input z wartością "42" typu string zamiast konwertować go na int.
  • Użyj pętli while zamiast pętli for.
edytowany 2x, ostatnio: Burmistrz, 2018-11-01 19:25
Może trochę zluzuj z tym żalem, a nie wjeżdżaj na kogoś kto być może dopiero się zaczyna uczyć? Pokaż swój kod, szczególnie z początków pisania, chętnie się pośmiejemy. A co do wskazówek nie są jakieś szczególnie pomocne. W zadaniu jest mowa o małych liczbach, więc naturalnym jest użycie int'a. - Mr.YaHooo 2018-11-02 15:41
nie wjeżdżaj na kogoś kto być może dopiero się zaczyna uczyć - wytłumacz gdzie widzisz ten wjazd. Może w tym zdaniu, gdzie z szacunkiem napisałem Twój z dużej litery? Tobie nie żal komentować, więc zapraszam do rozłożenia jego kodu na czynniki pierwsze i pokazanie po kolei co zrobił nie tak, bo widocznie według Ciebie to będzie bardziej pomocne niż zachęcenie do nauki, a potem samodzielny powrót do tego samego zadania. Gdybym nie wiedział, że dopiero zaczyna się uczyć, to po co dawałbym rady o przeczytaniu książki dla początkujących? - Burmistrz 2018-11-02 16:12
@Burmistrz: Zdanie "Żal komentować Twój kod" jasno pokazuje, że wszystko jest be i do bani i wielu początkujących po takim zdaniu byłoby po prostu urażonych (moim zdaniem słusznie, ponieważ wydźwięk jest mocno negatywny) i mało co wnosi (w takiej formie). Zgodzę się, ze kod pytacza jest słaby, jednak można to powiedzieć bardziej kulturalnie. - Mr.YaHooo 2018-11-02 20:21

Pozostało 580 znaków

2018-11-01 19:46
Kaczka Pytek
0

Nie chodzi o redukowanie linii. Tylko o to ze kod spelnia swoja funkcjonalnosc, a spoje go nie akceptuje. W momencie gdy wypada 42 kod sie zatrzymuje. Jak jest w zadaniu.

@liczb mozna wprowadzic tylko 6. Nie widzę zwiazku.

Wiem, że nie chodzi o redukowanie, ale warto byłoby do zredukowania dążyć. - Burmistrz 2018-11-01 20:36

Pozostało 580 znaków

2018-11-01 19:49
0
Kaczka Pytek napisał(a):

Nie chodzi o redukowanie linii. Tylko o to ze kod spelnia swoja funkcjonalnosc, a spoje go nie akceptuje. W momencie gdy wypada 42 kod sie zatrzymuje. Jak jest w zadaniu.

@liczb mozna wprowadzic tylko 6. Nie widzę zwiazku.

Skąd Wiesz, że można wprowadzić tylko sześć liczb?


Pozostało 580 znaków

2018-11-01 20:15
Kaczka Pytek
0
int r1 = Convert.ToInt32(Console.ReadLine());
int r2 = Convert.ToInt32(Console.ReadLine());
int r3 = Convert.ToInt32(Console.ReadLine());
int r4 = Convert.ToInt32(Console.ReadLine());
int r5 = Convert.ToInt32(Console.ReadLine());

napisalem 5 tylko post juz zostal usuniety...

edytowany 1x, ostatnio: furious programming, 2018-11-01 20:19
Napisałeś pod rząd dwa identyczne posty – jeden usunąłem. - furious programming 2018-11-01 20:19
Właściwie to napisał kolejny post, w którym cytował swój poprzedni i zamienił "6" na "5" ;P - Burmistrz 2018-11-01 20:34
Fakt, umknął mi ten szczególik… ;) - furious programming 2018-11-01 20:36

Pozostało 580 znaków

2018-11-01 20:24
0

Czy można to rozwiązać w ten sposób:


#include <iostream>

using namespace std;

int main()
{
    int a = 0;
    cout << "podaj liczbę";
    cin >> a;
     cout<<a;

     while (a != 42)
     {
         cout << "podaj liczbę";
         cin >> a;
         if(a!=42)
        { cout<<a;}
         else
         {cout<<"koniec programu";}
     }

    return 0;

}
edytowany 2x, ostatnio: crispia, 2018-11-01 21:39

Pozostało 580 znaków

2018-11-01 22:24
1

Poniższy kod mi działa, ale na spoje nie przechodzi testcasow. Pytanie dlaczego? Nie rozumiem tego systemu.

Kod może i jako tako działa, ale dla podanego przykładu. W rzeczywistości chodzi o napisanie kodu "uniwersalnego", który zadziała gdy np. 42 będzie np.tysiąc sześćset dziewięćdziesiąta dziewiąta w kolejce.

Nie chodzi o redukowanie linii. Tylko o to ze kod spelnia swoja funkcjonalnosc, a spoje go nie akceptuje. W momencie gdy wypada 42 kod sie zatrzymuje. Jak jest w zadaniu.

Skoro nie akceptuje, to znaczy że nie spełnia. I chodzi tu o redukowanie linii - zadanie da się zrobić za pomocą jednej pętli (a przynajmniej mi tak zaliczyło).

liczb mozna wprowadzic tylko 6. Nie widzę zwiazku.

Skąd ten pomysł? Jesteś w stanie wskazać cokolwiek na poparcie tej tezy?

Pozostało 580 znaków

2018-11-02 13:06
0

Wysłałem swoje rozwiązanie na SPOJ- system wyrzucił błąd złe rozwiązanie. A już miałem nadzieję że mam szczęście początkującego. Te liczby z zadania mają być pobierane od użytkownika, czy zapisane gdzieś w programie i testowane w pętli while (number!=42). Z góry dziękuję za pomoc. Czy mógłby ktoś łaskawie spojrzeć na mój kod i doradzić co powinienem usprawnić/napisać od nowa. Pozdrawiam Krzysztof :)

Jasne, masz za dużo cout tzn Twój program powinien robić dokładnie to co napisane w zadaniu. Czy w zadaniu jest napisane żeby wyświetlać tekst "podaj liczbę" oraz "koniec programu"? Dodatkowo przypadek brzegowy: co się stanie jeśli to pierwsza liczba to 42? Edit: żeby zrobić prostą sprawdzarkę wystarczy skopiować przykładowe dane do pliku tekstowego, umieścić go w tym samym folderze co ~skompilowany program i przekierować ten plik na wejście programu tak samo z wyjściem: Przekierowanie strumienia wyjścia do pliku .txt - lubie_programowac 2018-11-02 13:12

Pozostało 580 znaków

2018-11-02 14:22
0

@crispia:
Prawie dobrze, wywal te couty.
Ogólna zasada jest taka:

numer = 0
dopóty (warunek,by pętla była nieskończona) 
  wczytaj numer;
  jezeli nie jest 42 
    wypisz go
 w przeciwnym razie
    wyjdź z pętli

PS, Edytowany, by nie było gotowca. Sprawdzone, zaliczyło mi tą metodą w Pythonie i C++.

edytowany 2x, ostatnio: Serechiel, 2018-11-02 14:32

Pozostało 580 znaków

2018-11-02 15:09
0
string line = string.Empty;
while ((line = Console.ReadLine()) != null && line != "42") {
        Console.WriteLine(line);
 }

Mam nadzieję że patrząc na powyższy kod zrozumiesz co robiłeś źle.. Oczywiście da się to zrobić "prościej" tak jak @Serechiel

edytowany 1x, ostatnio: furious programming, 2018-11-02 18:04

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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