• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Czy umiesz potęgować - błędna odpowiedź

Object Storage Arubacloud
0 głosów
175 wizyt
pytanie zadane 31 października 2019 w C i C++ przez in4mat Bywalec (2,600 p.)
edycja 4 listopada 2019 przez in4mat

Witam, jakiś czas temu wróciłem do zadanek ze spoja i przy ww. zadaniu sędzia stwierdza błędną odpowiedź. Czy ktoś mógłby zerknąć na mój kod i ewentualnie powiedzieć co tu jest nie tak? Robiłem różne testy i nie widzę błędu w tym kodzie, ale muszę się jeszcze Was poradzić :). Z góry dzięki za jakieś sugestie 
 

#include <iostream>

using namespace std;

int ilePrzypadkow, d;
long int podstawa, wykladnik;

int main()
{
    cin>>ilePrzypadkow;
    for(int i=1; i<=ilePrzypadkow; i++)
    {
        cin>>podstawa>>wykladnik;
        d = podstawa%10;
        switch(d)
        {
            case 4: //przypadek dla potegi 4
            {
                if(wykladnik%2 == 0)
                {
                    cout<<"6"<<endl;
                }
                else
                {
                    cout<<"4"<<endl;
                }
                break;

            }
            case 9: //przypadek dla potegi 9
            {
                if(wykladnik%2 == 0)
                {
                    cout<<"1"<<endl;
                }
                else
                {
                    cout<<"9"<<endl;
                }
                break;

            }
            case 5: //przypadek dla potegi 5
            {
               cout<<"5"<<endl;
                break;
            }
            case 6: //przypadek dla potegi 6
            {
                cout<<"6"<<endl;
                break;
            }
            case 2: //przypadek dla potegi 2
            {
                if(wykladnik%4 == 0 )
                {
                    cout<<"6"<<endl;
                }
                else if (wykladnik%4 == 2)
                {
                    cout<<"4"<<endl;
                }
                else if (wykladnik%4 == 3)
                {
                    cout<<"8"<<endl;
                }
                else if (wykladnik%4 == 1)
                {
                    cout<<"2"<<endl;
                }
                break;

            }
            case 3: //przypadek dla potegi 3
            {
                if(wykladnik%4 == 0 )
                {
                    cout<<"1"<<endl;
                }
                else if (wykladnik%4 == 2)
                {
                    cout<<"9"<<endl;
                }
                else if (wykladnik%4 == 3)
                {
                    cout<<"7"<<endl;
                }
                else if (wykladnik%4 == 1)
                {
                    cout<<"3"<<endl;
                }
                break;

            }
            case 7: //przypadek dla potegi 7
            {
                if(wykladnik%4 == 0 )
                {
                    cout<<"1"<<endl;
                }
                else if (wykladnik%4 == 2)
                {
                    cout<<"9"<<endl;
                }
                else if (wykladnik%4 == 3)
                {
                    cout<<"3"<<endl;
                }
                else if (wykladnik%4 == 1)
                {
                    cout<<"7"<<endl;
                }
                break;

            }
            case 8: //przypadek dla potegi 8
            {
                if(wykladnik%4 == 0 )
                {
                    cout<<"6"<<endl;
                }
                 else if (wykladnik%4 == 2)
                {
                    cout<<"4"<<endl;
                }
               else if (wykladnik%4 == 3)
                {
                    cout<<"2"<<endl;
                }
                else if (wykladnik%4 == 1)
                {
                    cout<<"8"<<endl;
                }
                break;

            }
            case 1: //przypadek dla potegi 1
            {
                cout<<"1"<<endl;
                break;
            }

        }

    }
    return 0;
}

 

1 odpowiedź

0 głosów
odpowiedź 31 października 2019 przez Bondrusiek Maniak (61,370 p.)
wybrane 5 listopada 2019 przez in4mat
 
Najlepsza

Witam,

średnio sformatowany jest ten kod. Trudno się to czyta. Od siebie mógłbym dodać aby zamiast funkcji to_string() operatora %.

int c = podstawa % 10;
switch(c){
case 1:
break;
case 2:
break;
...

Zamiast jeszcze tworzenia tablicy potęga i zwiększania indeksu możesz już bezpośrednio wypisywać dane. Dla SPOJa nie ma znaczenia kolejność pomiędzy pobieraniem danych a wyświetlaniem ich np.

      case 5: //przypadek dla potegi 5
      {
          std::cout << "5" << std::endl;
          break;
      }

 

komentarz 4 listopada 2019 przez in4mat Bywalec (2,600 p.)
Hej, dzięki za odpowiedź :). W sumie fakt, mógłbym użyć operatora %, ale jakoś tak prędzej wpadłem na to z tym stringiem i wydaje mi się, że działa prawidłowo, co do formatowania to fakt, było dość nieczytelne, ale już to poprawiłem :). Oprócz powyższych zauważyłeś jakiś błąd w tym kodzie przez co SPOJ nie chce go zaakceptować?
komentarz 5 listopada 2019 przez Bondrusiek Maniak (61,370 p.)

Trudno mi wskazać błąd. Wcześniej robiłem ten przykład. Wkleje tutaj różnicę pomiędzy moim programem a Twoim:

Dla 8

case 8 :
                    if(!(b[i]%4))
                    cout << "6" << endl;

                    else if(!(b[i]%2))
                    cout << "4" << endl ;
                    else if((b[i] > 8))
                    {
                        for(int k = 3 ; k<=1000000000 ; k+=4)
                            if(!(b[i]%k))
                            {
                                cout << "2" << endl ;
                                break ;
                            }
                    }
                 else
                 {
                    cout << "8" << endl ;
                 }
                break;

Dla 7:

case 7 :
                if(!(b[i]%4))
                    cout << "1" << endl;
                else if(!(b[i]%2))
                    cout << "9" << endl;
                else if((b[i] > 7))
                    {
                        for(int k = 3 ; k<=1000000000 ; k+=4)
                            if(!(b[i]%k))
                            {
                                cout << "3" << endl ;
                                break ;
                            }
                    }
                else
                    cout << "7" << endl;
                break;

dla 3

case 3 :
                if(!(b[i]%4))
                    cout << "1" << endl ;
                else if(!(b[i]%2))
                    cout << "9" << endl;
                else if((b[i] > 3))
                    {
                        for(int k = 3 ; k<=1000000000 ; k+=4)
                            if(!(b[i]%k))
                            {
                                cout << "7" << endl ;
                                break ;
                            }
                    }
                else
                    {
                    cout << "3" << endl ;

                    }
                break;

dla 2:

case 2 :
                if(!(b[i]%4))
                    cout << "6" << endl ;
                else if(!(b[i]%2))
                    cout << "4" << endl ;
                else if((b[i] > 2))
                    {
                        for(int k = 3 ; k<=1000000000 ; k+=4)
                            if(!(b[i]%k))
                            {
                                cout << "8" << endl ;
                                break ;
                            }
                    }
                else
                    {
                        cout << "2" << endl;
                    }
                break;

 

komentarz 5 listopada 2019 przez in4mat Bywalec (2,600 p.)
Dobra, mam to :). W swoim kodzie nie dodałem case gdy reszta z dzielenia jest równa 0... Teraz wszystko chodzi jak powinno i spoj zaakceptował rozwiązanie :P. Dzięki bardzo za pomoc :)

Podobne pytania

+1 głos
1 odpowiedź 1,990 wizyt
+1 głos
2 odpowiedzi 1,061 wizyt
0 głosów
2 odpowiedzi 374 wizyt

92,580 zapytań

141,432 odpowiedzi

319,664 komentarzy

61,965 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...