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

Spoj zadanie limit czasu

Object Storage Arubacloud
0 głosów
78 wizyt
pytanie zadane 11 lipca 2017 w Rozwój zawodowy, nauka, praca przez michalix1275 Początkujący (270 p.)
edycja 11 lipca 2017 przez michalix1275

Witam mam problem z zadaniem z silnią na SPOJ.

Wywala mi cały czas taki błąd: 

Wywalało w takim przypadku:

#include <iostream>
using namespace std;

int n;
int b;
int liczba=1;
int d=1;
int dziesiatki, jednosci;

int main()
{
    cin>>b;
    while(b>0)
    {
        cin>>n;
       if(n<10)
        {
         for(int a=1;a<=n;a++)
        {
             liczba*=a;
                  if(n>1)
                       liczba*=++a;
        }
             dziesiatki=liczba/10;
              jednosci=liczba%10;
        cout<<dziesiatki<<' '<<jednosci<<endl;
       }


    }
    return 0;
}

I co mnie zdziwiło w takim :D :

#include <iostream>
using namespace std;

int n;
int b;


int main()
{
    cin>>b;
    while(b>0)
    {
        cin>>n;
        cout<<'0'<<' '<<'0'<<endl;

    }
    return 0;
}

Powie mi ktoś jak mam go bardziej skrócić  lub ulepszyć ? smiley

1 odpowiedź

+1 głos
odpowiedź 11 lipca 2017 przez niezalogowany
wybrane 11 lipca 2017 przez michalix1275
 
Najlepsza

1. Gdy przekraczasz limit czasu to znaczy, że jest duże prawdopodobieństwo, że pętla nie ma końca. Twoje pętle działają tak długo jak b > 0. Skoro nigdzie nie zmieniasz b to program po wykonaniu tej liczby testów nigdy się nie zakończy.

2. Warunek:

if(n>1)   liczba*=++a;

Jest niepotrzebny.

3. Zmienna liczba nie jest zerowana (jedynkowana :D). Po jednym teście każdy kolejny test jest błędny, bo działasz na liczbie która ma wartość inną od jedynki. Inne rozwiązanie - zrób liczbę lokalną zmienną w pętli:

#include <iostream>
using namespace std;

int main()
{
    int n;
    int b;

    int d=1;
    int dziesiatki, jednosci;

    cin>>b;
    while(b>0)
    {
        int liczba=1;
        cin>>n;
        if(n<10)
        {
            for(int a=1;a<=n;a++)
            {
                 liczba*=a;
            }
            dziesiatki=liczba/10;
            jednosci=liczba%10;
            cout<<dziesiatki<<' '<<jednosci<<endl;
       }
       b--;

    }
    return 0;
}

4. Drugą cyfrę liczysz niepoprawnie. Zobacz dla większych wartości. Powinno być:

dziesiatki=(liczba/10)%10;

5. Widzę, że rozumiesz potrzebę liczenia silni tylko poniżej n=10. Dodaj jeszcze else z wypisywaniem tych dwóch zer.

komentarz 11 lipca 2017 przez michalix1275 Początkujący (270 p.)
Dzięki spróbuję tak zrobić :D  Trochę pomieszałem kod kopiując go, dlatego tak wyszło ;)

Podobne pytania

0 głosów
2 odpowiedzi 476 wizyt
pytanie zadane 21 października 2018 w C i C++ przez Master3103 Początkujący (360 p.)
0 głosów
2 odpowiedzi 579 wizyt
0 głosów
1 odpowiedź 565 wizyt
pytanie zadane 3 lutego 2016 w Python przez Devero Początkujący (300 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 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!

...