Liczby Keitha
Kod był wyświetlany 2201 razy.
    /*
Name: Liczba Keitha
Copyright: GPL GNU
Date: 06-02-10 19:33
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. Przykład: 197 jest liczbą Keitha,
gdyż tworzy następujący ciąg (i sama w nim występuje):
1,	9,	7,	          17,	  33,	   57,	    107,	   197, ...
    ||	              ||	  ||	   ||	     ||	        ||
cyfry liczby 197	1+9+7	9+7+17	7+17+33	  17+33+57	 33+57+107
*/

#include<iostream>
#include<sstream>
using namespace std;

int main()
{
	string liczba;
	unsigned long long suma = 0;;
	unsigned long long liczbaKontrolna;
	bool isK = false;

	cout<<"Podaj liczbe do sprawdzenia ";
	cin>>liczba;

	/*konwersja string na long*/
	stringstream konwersja(liczba);
    konwersja>>liczbaKontrolna;
	unsigned long long *licz = new unsigned long long[liczba.size()];//stworzenie tablicy o wielkosci rownej liczbie cyfr w sprawdzanej liczbie

	/*przypisanie elementowi tablicy wartosci cyfry*/
	for(int i = 0; i < liczba.size(); i++)
	{
		string tmp = " ";
		tmp = liczba[i];
		stringstream konwersja(tmp);
		int j;
		konwersja>>j;
		licz[i] = j;
	}

	/*sprawdzenie czy liczba wystapi w ciagu powstalym z niej*/
	while(suma<liczbaKontrolna)
	{
		suma = 0;
		for(int i = 0; i < liczba.size(); i++)
		suma+=licz[i];


		if(suma == liczbaKontrolna)
		{
			isK = true;
			delete [] licz;
			break;
		}
		/*przesuniecie cyfr w tablicy i nadanie ostatniemu elementowi wartosci sumy*/
		else
		{
			for(int i = 0; i < liczba.size()-1; i++)
			licz[i] = licz[i+1];
			licz[liczba.size()-1] = suma;
		}
	}

	if(isK)
	cout<<"\nPodana liczba jest liczba Keitha";
	else
	cout<<"\nPodana liczba NIE jest liczba Keitha";

	cin.ignore();
	getchar();
	return 0;
}
    
Pobierz plik tekstowy
Administrator WJL
PHP&SQL coded by NOVA-IT