1 / 17
Oct 2020
    #include <iostream>
    #include<math.h>

    using namespace std;


    int main()
    {

    	int ilosc, a, b, c;

    	cout << "Ile liczb chcesz wpisac?: ";
    	cin >> ilosc;

    	for (int i = 0; i < ilosc; i++)
    	{
    		cout << "wpisz podstawe a i b " << endl;
    		cin >> a >> b;
    		c = pow(a, b);
    		if (c < 10)
    			cout << c << endl;
    		else {
    			c = c % 10;
    			cout << c << endl;
    		}
    	}

    	
    }

to mój kod, wedle podanego zadania i przykładu działa, ale sędzia nie uznaje, ktoś podpowie?

  • created

    Oct '20
  • last reply

    Nov '20
  • 16

    replies

  • 1.2k

    views

  • 5

    users

  • 3

    likes

  • 1

    link

  1. Klik
  2. Sędzia nie będzie zastanawiał się co jest wynikiem, a co jakimiś zbędnym tekstem typu "“Ile liczb chcesz wpisac?”. Jak powinno wyglądać wyjście dla przykładowych danych masz podane w zadaniu. Jeżeli chcesz koniecznie w swoim IDE wypisać coś dodatkowego na czas testów użyj strumienia std::clog.
  3. <cmath> zamiast <math.h>
  4. Testuj swój program dla skrajnych testów i zastanów się czemu Twój program nie będzie działać.

no jesli liczba bedzie 3 cyfrowa to poda druga a nie ostatnia liczbe, ale jak temu zaradzic?

Modulo z 10 poda zawsze ostatnią cyfrę liczby. Czy o to Ci chodzi?

Na przyklad
wejscie
2
987654325 987654321
987654326 987654321
wyjscie
5
6
ITP. itd.

Żeby nie było, że skrajne testy wzięła się z nieba:

Wejście
[…] zawierającym dwie liczby naturalne a i b oddzielone pojedynczym odstępem (spacją), takie, że (1 ≤ a,b ≤ 1 000 000 000).

#include <iostream>
    #include<cmath>

    using namespace std;


    int  LiczenieOstCyfryPotegi(int a, int b)
    {
        int wynik;
        if (a == 0)
            return 0;
        else if (a == 1)
            return 1;
        else if (a == 2)
        {
            if (b % 2 == 0)
                return 4 albo 6;
            else return 2 albo 8;
        }
        else if (a == 3)
        {
            if (b % 2 == 0)
                return 9 albo 1;
            else return 3 albo 7;
        }
        else if (a == 4)
        {
            if (b % 2 == 0)
                return 6;
            else return 4;

        }
        else if (a == 5)
        {
            return 5;
        }
        else if (a == 6)
        {
            return 6;
        }
        else if (a == 7)
        {
            if (b % 2 == 0)
                return 4 albo 1;
            else return 7 albo 3;
        }
        else if (a == 8)
        {
            if (b % 2 == 0)
                return 4 albo 6;
            else return 8 albo 2;
        }
        else if (a == 9)
        {
            if (b % 2 == 0)
                return 1;
            else return 9;
        }

    }



    int main()
    {

        int ilosc, a, b, c;

        cout << "Ile liczb chcesz wpisac?: ";
        cin >> ilosc;

        for (int i = 0; i < ilosc; i++)
        {
            cout << "wpisz podstawe a i b " << endl;
            cin >> a >> b;
            cout << LiczenieOstCyfryPotegi(a, b);
            
        }
        

    }

chyba zczailem koncept, ale nie wiem jeszcze jak poradzic sobie z poczwórnymi warunkami, bo podwójne po prostu rozdzieliłem je na warunki parzyste i nieparzyste

i wiem ( pogladowo dalem sobie to “albo”, bo nie wiem jak sobie z tym poradzić)

Skoro warunki mają być poczwórne to może modulo też powinno mieć coś wspólnego z czwórką :wink:

#include <iostream>
#include<cmath>

using namespace std;

int  LiczenieOstCyfryPotegi(int a, int b)
{
    int wynik;
    if (b == 0)
        return 1;
    else if (a == 1)
        return 1;
    else if (a == 2)
    {
        if (b % 4 == 1)
            return 2;
        else if (b % 4 == 2)
            return 4;
        else if (b % 4 == 3)
            return 8;
        else if (b % 4 == 0)
            return 6;
    }
    else if (a == 3)
    {
        if (b % 4 == 1)
            return 3;
        else if (b % 4 == 2)
            return 9;
        else if (b % 4 == 3)
            return 7;
        else if (b % 4 == 0)
            return 1;
    }
    else if (a == 4)
    {
        if (b % 2 == 0)
            return 6;
        else return 4;

    }
    else if (a == 5)
    {
        return 5;
    }
    else if (a == 6)
    {
        return 6;
    }
    else if (a == 7)
    {
        if (b % 4 == 1)
            return 7;
        else if (b % 4 == 2)
            return 9;
        else if (b % 4 == 3)
            return 3;
        else if (b % 4 == 0)
            return 1;
    }
    else if (a == 8)
    {
        if (b % 4 == 1)
            return 2;
        else if (b % 4 == 2)
            return 4;
        else if (b % 4 == 3)
            return 8;
        else if (b % 4 == 0)
            return 6;
    }
    else if (a == 9)
    {
        if (b % 2 == 0)
            return 1;
        else return 9;
    }

}

int main()
{

    int ilosc, a, b;

    cin >> ilosc;
    int* tab = new int[ilosc];

    for (int i = 0; i < ilosc; i++)
    {

        cin >> a >> b;
        tab[i]= LiczenieOstCyfryPotegi(a, b);

    }
    for (int i = 0; i < ilosc; i++) {
        cout << tab[i] << endl;
    }

}

rozkminilem tak, ale nadal nie przyjmuje ;/

Pomyliłeś się trochę przy else if (a == 8). Powinno być:

case 8:
	b %= 4;
	switch (b)
	{
		case 0: cout << 6 << endl; break;
		case 1: cout << 8 << endl; break;
		case 2: cout << 4 << endl; break;
		case 3: cout << 2 << endl; break;
	}

Co się stanie gdy podstawa a > 9? Już jesteś prawie przy wykonaniu zadania :wink:

no właśnie od dobrej godziny siedze i myślę, bo kod nie działa dla podstawy potęgi wyzszej niz 9…

#include <iostream>
#include<cmath>

using namespace std;

int  LiczenieOstCyfryPotegi(int a, int b)
{
    int wynik;
    if (b == 0)
        return 1;
    else if (a%10==1)
        return 1;
    else if (a%10==2)
    {
        if (b % 4 == 1)
            return 2;
        else if (b % 4 == 2)
            return 4;
        else if (b % 4 == 3)
            return 8;
        else if (b % 4 == 0)
            return 6;
    }
    else if (a%10==3)
    {
        if (b % 4 == 1)
            return 3;
        else if (b % 4 == 2)
            return 9;
        else if (b % 4 == 3)
            return 7;
        else if (b % 4 == 0)
            return 1;
    }
    else if (a%10==4)
    {
        if (b % 2 == 0)
            return 6;
        else return 4;

    }
    else if (a%10==5)
    {
        return 5;
    }
    else if (a%10==6)
    {
        return 6;
    }
    else if (a%10==7)
    {
        if (b % 4 == 1)
            return 7;
        else if (b % 4 == 2)
            return 9;
        else if (b % 4 == 3)
            return 3;
        else if (b % 4 == 0)
            return 1;
    }
    else if (a%10==8)
    {
        if (b % 4 == 1)
            return 2;
        else if (b % 4 == 2)
            return 4;
        else if (b % 4 == 3)
            return 8;
        else if (b % 4 == 0)
            return 6;
    }
    else if (a%10==9)
    {
        if (b % 2 == 0)
            return 1;
        else return 9;
    }

}

int main()
{

    int ilosc, a, b;

    cin >> ilosc;
    int* tab = new int[ilosc];

    for (int i = 0; i < ilosc; i++)
    {

        cin >> a >> b;
        tab[i] = LiczenieOstCyfryPotegi(a, b);

    }
    for (int i = 0; i < ilosc; i++) {
        cout << tab[i] << endl;
    }

}

ogarnalem dzieki

Nie pisana zasada! Nie umieszczaj na forum swojego AC kodu!!
Twój kod jaki jest każdy widzi - w końcu dopiero zaczynasz. Dodatkowo dla danych typu:
10 1
100 2
1000 3
itd , nawet bez testowania, widać, że twój kod będzie miał problemy. Czemu więc mimo tego uzyskałeś AC. Czy to testy są słabe? Nie, to twój kod jest z “drobnym błędem” i w końcu to obowiązek kodera - napisać poprawny kod, a autor nie ma wcale obowiązku przygotować wszelkie możliwe testy, bo i tak powinniśmy być mu wdzięczni, za przygotowanie problemu.

Chyba, że twoim głównym celem jest uzyskanie AC, a nie nauka poprawnego programowania-kodowania.
Uzupełnione: Jeśli zaczynasz, przeczytaj koniecznie! <--kliknij w to proszę! <-- KONIECZNIE!!