Liczby Keitha ver. 2
Kod był wyświetlany 1601 razy.
    /*
  Name: Liczba Keitha
  Copyright: GPL GNU
  Date: 05-06-10 11:01
  Description: 
Napisz program sprawdzający czy liczba podana przez użytkownika jest liczbą Keitha,
gdzie liczbą Keitha nazywamy n-cyfrową liczbę całkowitą K, która tworzy ciąg liczbowy
o następujących elementach: pierwsze n wyrazów ciągu jest równych poszczególnym cyfrom liczby K,
każdy kolejny wyraz jest sumą poprzedzających go n wyrazów ciągu.
Ponadto na którymś miejscu w ciągu pojawia się liczba K.
*/
#include <iostream>
using namespace std;

int ilu_cyfrowa(int);
int* zapisz_cyfry(int);

int main ()
{
    int liczba, *tab, tmp, rozmiar;

    cout <<"Podaj liczbe: ";
    cin >> liczba;

    tab = zapisz_cyfry(liczba); // cyfry zapisane w odwrotnej kolejnosci
    rozmiar = ilu_cyfrowa(liczba);

    while (tab[rozmiar - 1] < liczba)
    {
        tmp = 0;

        for (int i = 0; i < rozmiar; ++i)
            tmp += tab[i];

        for (int i = 0; i < rozmiar - 1; ++i)
            tab[i] = tab[i+1];

        tab[rozmiar - 1] = tmp;
    }

    if (tmp == liczba)
        cout <<"Liczba jest liczba Keitha"<< endl;

    else
        cout <<"Liczba nie jest liczba Keitha"<< endl;

    delete [] tab;
    cin.ignore();
    getchar();
    return 0;
}

int ilu_cyfrowa(int a)
{
    int ilu = 0;

    while (a)
    {
        a -= (a % 10);
        a /= 10;
        ++ilu;
    }

    return ilu;
}

int* zapisz_cyfry(int a)
{
    int sz = ilu_cyfrowa(a);
    int* wsk = new int [sz];

    for (int i = 0; i < sz; ++i)
    {
        wsk[i] = a % 10;
        a -= wsk[i];
        a /= 10;
    }

    reverse (wsk, wsk + sz); // odwracamy tablice

    return wsk;
}
    
Pobierz plik tekstowy
Administrator WJL
PHP&SQL coded by NOVA-IT