środa, 6 grudnia 2017

00019 - 499 - Czy umiesz potęgować - www.pl.spoj.com

Treść zadania:
Dla danych dwóch liczb naturalnych a i b, wyznaczyć ostatnią cyfrę liczby ab.

Zadanie
Napisz program, który:

•wczyta ze standardowego wejścia: podstawę a oraz wykładnik b,
•wyznaczy ostatnią cyfrę liczby ab,
•wypisze wynik na standardowe wyjście.

Wejście
W pierwszej linii wejścia znajduje się jedna liczba całkowia D (1≤D≤10), oznaczjąca liczbę przypadków do rozważenia. Opis każdego przypadku podany jest w jednym wierszu, zawierającym dwie liczby naturalne a i b oddzielone pojedynczym odstępem (spacją), takie, że (1 ≤ a,b ≤ 1 000 000 000).

Wyjście
Dla każdego przypadku z wejścia Twój program powinien wypisać (w osobnej linii dla każdego przypadku z wejścia) cyfrę jedności liczby ab zapisanej dziesiętnie.

Przykład
Dla danych wejściowych:

2
2 3
3 3

poprawną odpowiedzią jest:

8
7


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

using namespace std;

int main()
{
    int d;
    cin>>d;
    int a[d],b[d];
    for(int i=0; i<d; ++i)
    {
        cin>>a[i]>>b[i];
    }
    for(int i=0 ; i<d ; ++i)
    {
        int c = a[i]%10;
        switch(c)
        {
            case 9:
                if(b[i]%2)
                {
                    cout<<"9"<<endl;
                }
                else
                {
                    cout<<"1"<<endl;
                }
                break;
            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;
            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;
            case 6 :
                cout<<"6"<<endl;
                break;
            case 5 :
                cout <<"5"<<endl;
                break;
            case 4 :
                if(!(b[i]%2))
                {
                    cout<<"6"<<endl;
                }
                else
                {
                    cout<<"4"<<endl;
                }
                break;
            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;
            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;
            case 1:
                cout<<"1"<<endl;
                break ;
            case 0:
                cout<<"0"<<endl;
                break ;
            default :
                cout<<a[i]%10<<endl;
                break;
        }
    }
    return 0 ;
}


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

poniedziałek, 4 grudnia 2017

00018 - 609 - Pole pewnego koła - www.pl.spoj.com

Treść zadania:
Wyznacz pole koła, którego okrąg jest przecięciem dwóch identycznych sfer o promieniu r. Odległość pomiędzy środkami sfer wynosi d. Wartości r oraz d podane na wejściu są liczbami zmiennoprzecinkowymi. Można założyć, że 1 <= d < 2 * r <= 2000.














Wejście
Na wejściu podane są dwie liczby zmiennoprzecinkowe r d oddzielone spacją, oznaczające odpowiednio promień sfery i odległość między środkami sfer.

Wyjście
Należy wypisać pojedynczą liczbę zmiennoprzecinkową S oznaczającą pole koła. Dopuszczalny błąd wyniku wynosi 0.01.

Uwaga. W roli separatora dziesiętnego należy używać kropki (nie: przecinka). Można przyjąć, że stosunek obwodu koła do jego średnicy wynosi 3.141592654.

Liczba punktów za zadanie jest równa liczbie poprawnie rozwiązanych testów / 5. Testów jest 20.

Przykład

Przykład 1

Wejście:
10 10

Wyjście:
235.62

Przykład 2

Wejście:
1000 1500

Wyjście:
1374446.79


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

#define M_PI 3.141592654

int main()
{
    double r, d;
    for(;scanf("%lf%lf",&r,&d)!=EOF;)
    {
        d=d/2;
        printf("%.2lf\n",M_PI*(sqrt((r*r)-(d*d)))*(sqrt((r*r)-(d*d))));
    }
    return 0;
}


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

using namespace std;

int main()
{
    double r, d;
    cout.setf(ios::fixed);
    cout.precision(2);
    for(;cin>>r>>d;)
    {
        d=d/2;
        cout<<M_PI*(sqrt((r*r)-(d*d)))*(sqrt((r*r)-(d*d)))<<endl;
    }
    return 0;
}


Kod źródłowy w Python 2:
import math
input_data = raw_input('')
if input_data == '':
    exit(0)
list = input_data.split(' ')
output = a = b = r_n = 0.000000000
pi = 3.141592654
a = float(list[0])
b = float(list[1])/2
if float(list[1]) >= 2*a:
    output = 0.00
elif float(list[1]) == 0:
    output = pi * a * a
else:
    r_n = math.sqrt((a * a) - (b * b))
    output = pi * r_n * r_n
print output
exit(0)


Kod źródłowy w Python 3:
import math
input_data = input('')
if input_data == '':
    exit(0)
list = input_data.split(' ')
output = a = b = r_n = 0.000000000
pi = 3.141592654
a = float(list[0])
b = float(list[1])/2
if float(list[1]) >= 2*a:
    output = 0.00
elif float(list[1]) == 0:
    output = pi * a * a
else:
    r_n = math.sqrt((a * a) - (b * b))
    output = pi * r_n * r_n
print (output)
exit(0)


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