czwartek, 19 października 2017

00005 - 496 - Dwie cyfry silni - www.pl.spoj.com

Treść zadania:

Niech n będzie nieujemną liczbą całkowitą. Liczbę n! (czytaj n-silnia)
definiuje się następująco. Jeśli n ≤ 1, to n! = 1. Dla n > 1, n! jest
równe iloczynowi wszystkich liczb od 1 do n, czyli n! = 1 * 2 * ... * n.
Na przykład 4! = 1*2*3*4 = 24.

Zadanie
Napisz program, który:

• wczyta ze standardowego wejścia nieujemną liczbę całkowitą n,
• policzy cyfrę dziesiatek oraz cyfrę jedności w zapisie dziesiętnym liczby n!,
• wypisze wynik na standardowe wyjście.

Wejście
W pierwszej linii wejścia znajduje się jedna liczba całkowia D (1≤D≤30),
oznaczjąca liczbę przypadków do rozważenia. Opis każdego przypadku składa
się z jednej linii, w której znajduje się jedna nieujemna liczba
całkowita n (0 ≤ n ≤ 1 000 000 000).

Wyjście
Dla każdego przypadku z wejścia. Twój program powinien wypisać w osobnej
linii dokładnie dwie cyfry (oddzielone pojedynczą spacją): cyfrę dziesiątek
i cyfrę jedności liczby n! zapisanej w systemie dziesiętnym.

Przykład
Dla danych wejściowych:

2
1
4

poprawną odpowiedzią jest:

0 1
2 4


Kod źródłowy w C:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i=0,j=0;
    unsigned long long int a=0;
    scanf("%d",&i);
    for(j;j<i;++j)
    {
        scanf("%d",&a);
        switch(a)
        {
        case 0:
        case 1:
            printf("%d %d\n",0,1);
            break;
        case 2:
            printf("%d %d\n",0,2);
            break;
        case 3:
            printf("%d %d\n",0,6);
            break;
        case 4:
            printf("%d %d\n",2,4);
            break;
        case 7:
            printf("%d %d\n",4,0);
            break;
        case 5:
        case 6:
        case 8:
            printf("%d %d\n",2,0);
            break;
        case 9:
            printf("%d %d\n",8,0);
            break;
        default:
            printf("%d %d\n",0,0);
            break;
        }
    }
    return 0;
}


Kod źródłowy w C++:
#include <iostream>
#include <cstdio>

using namespace std;

int main()
{
    int i=0,j=0;
    unsigned long long int a=0;
    cin>>i;
    for(j;j<i;++j)
    {
        cin>>a;
        switch(a)
        {
        case 0:
        case 1:
            cout<<"0 1"<<endl;
            break;
        case 2:
            cout<<"0 2"<<endl;
            break;
        case 3:
            cout<<"0 6"<<endl;
            break;
        case 4:
            cout<<"2 4"<<endl;
            break;
        case 5:
        case 6:
        case 8:
            cout<<"2 0"<<endl;
            break;
        case 7:
            cout<<"4 0"<<endl;
            break;
        case 9:
            cout<<"8 0"<<endl;
            break;
        default:
            cout<<"0 0"<<endl;
            break;
        }
    }
    return 0;
}


Kod źródłowy w Python 2:
input = int(raw_input(''))
for i in range(0, input, +1):
    number = int(raw_input(''))
    if number == 1:
        print '0 1'
    elif number == 0:
        print '0 1'
    elif number == 2:
        print '0 2'
    elif number == 3:
        print '0 6'
    elif number == 4:
        print '2 4'
    elif number == 5:
        print '2 0'
    elif number == 6:
        print '2 0'
    elif number == 7:
        print '4 0'
    elif number == 8:
        print  '2 0'
    elif number == 9:
        print '8 0'
    else:
        print '0 0' 


Kod źródłowy w Python 3:
standard_input = int(input(''))
for i in range(0, standard_input, +1):
    number = int(input(''))
    if number == 1:
        print ('0 1')
    elif number == 0:
        print ('0 1')
    elif number == 2:
        print ('0 2')
    elif number == 3:
        print ('0 6')
    elif number == 4:
        print ('2 4')
    elif number == 5:
        print ('2 0')
    elif number == 6:
        print ('2 0')
    elif number == 7:
        print ('4 0')
    elif number == 8:
        print  ('2 0')
    elif number == 9:
        print ('8 0')
    else:
        print ('0 0')


Źródło:
http://pl.spoj.com/problems/FCTRL3/

1 komentarz:

  1. Ja to inaczej rozwiązałem. I Sędzia sądu SPOJ nie przyjmuje tego. Dlaczego, czy ma swój uregulowany algorytm i nie dopuszcza myślenia innych ludzi?
    #include
    #include

    using namespace std;
    string liczba, spacja;
    int D, dl;
    unsigned long long int n;
    int silnia = 1;

    int main()
    {
    cin >> D;
    for (int i = 0; i < D; i++)
    {
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
    silnia = silnia * i;
    liczba = to_string(silnia);
    dl = liczba.length();

    if (silnia < 10) {
    liczba.insert(0, "0 ");
    }
    else
    {
    liczba = liczba.erase(0, dl-2);
    spacja = " ";
    liczba = liczba[0] + spacja + liczba[1];
    }
    }
    //cout << silnia << endl;
    cout << liczba << endl;
    silnia = 1;
    }

    return 0;
    }

    OdpowiedzUsuń