Jak dla mnie, nie [koniecznie].
PS
O mądrości lub głupocie konstrukcji decyduje konstruktor [coder].
PS 2
Dla SPOJ’a liczy się tylko uzyskany w rozsądnym czasie wynik, a nie metoda. Możesz więc spokojnie użyć zamiast: “najgłubszej konstrukcji z [kilku] ifów”, dowolnej innej, np ze switch, z jednym ifem, lub całkowicie bez, a także możesz to zrobić, jak tylko sobie pomyślisz, czy rekurencyjnie czy iteracyjnie czy jeszcze inaczej. Masz tu całkowitą swobobę, liczy się cel a nie środki.
Jeżeli jesteś w stanie zaproponować sensowne rozwiązanie rekurencyjne dla tego problemu to dlaczego nie? Sytuacja jest o tyle prosta, że sensowne rozwiązanie oznacza jedynie AC czyli ma wyłącznie mieścić się w jakimś limicie czasowym i działać zaledwie dla wybranych, podanych w treści zadania liczb. A jeżeli będzie ono lepsze od ifów to chętnie je poznam.
Coś słabo czytałeś. Ile zajmie ci wykonanie programu dla tego testu?
10
1000000000
1000000000
1000000000
1000000000
1000000000
1000000000
1000000000
1000000000
1000000000
1000000000
Poza tym twój program daje złe wyniki: https://ideone.com/c7ZvlY5
Ktoś wie czemu spoj mi tego nie zalicza?
#include <iostream>
#include <string>
using namespace std;
int main()
{
int n,liczba, y, d, j;
string x;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>liczba;
if(liczba<4)
{
if(liczba==0) cout<<0<<" "<<1<<endl;
else cout<<0<<" "<<liczba<<endl;
}
else if(liczba<10)
{
if(liczba==4) cout<<2<<" "<<4<<endl;
else if(liczba==5||liczba==6||liczba==8) cout<<2<<" "<<0<<endl;
else if(liczba==7) cout<<4<<" "<<0<<endl;
else if(liczba==9) cout<<8<<" "<<0<<endl;
}
else
{
cout<<0<<" "<<0<<endl;
}
}
return 0;
}
Hej, a wie ktoś czemu mi wyrzuca timeout?
#include <iostream>
#include <math.h>
using namespace std;
int wynikSilni = 1;
int silnia(int liczba) {
if(liczba == 0 || liczba == 1) return wynikSilni;
return liczba * silnia(liczba-1);
}
int ile;
int main() {
cin >> ile;
int tab[ile];
int rozdzielona[2];
for (int i = 1; i <= ile; i++) {
cin >> tab[i];
string wynik = to_string(silnia(tab[i]));
int jednosci = wynik.length() - 1;
int dziesiatki = wynik.length() - 2;
if(wynik[dziesiatki] == NULL) {
wynik[1] = wynik[jednosci];
wynik[0] = '0';
dziesiatki++;
jednosci++;
}
cout << wynik[dziesiatki] << " " << wynik[jednosci] << endl;
}
}