[C++] Liczby Armstronga dla liczb 4 cyfrowych


(lukasz_n) #1

Witam, mam bardzo gorącą prośbę, mam kod, ale niestety nie rozumiem o co w nim dokładnie chodzi, czy mógłbym liczyć na pomoc w opisaniu co robi dany blok kodu/ linijka. Za pomoc z góry dziękuję. Proszę o to ponieważ nikt nie potrafi tak "na chłopski rozum" wytłumaczyć o co chodzi. Teorię matematyczną oczywiście znam.

#include 

using namespace std;



main()

{






	 int tbpot[10][10],tbmn[10][10]; 

      unsigned i,j; 


              for(i=0,j=0;j<=9;j++) tbpot[i][j]=j;           

              for(i=1,j=0;j<=9;j++) tbpot[i][j]=j*j;                    

              for(i=2,j=0;j<=9;j++) tbpot[i][j]=j*j*j; 

              for(i=3,j=0;j<=9;j++) tbpot[i][j]=j*j*j*j;

              for(i=4,j=0;j<=9;j++) tbpot[i][j]=j*j*j*j*j;



              for(i=0,j=0;j<=9;jc++) tbmn[i][j]=j;              

              for(i=1,j=0;j<=9;j++) tbmn[i][j]=j*10;              

              for(i=2,j=0;j<=9;j++) tbmn[i][j]=j*100;

              for(i=3,j=0;j<=9;j++) tbmn[i][j]=j*1000;

              for(i=4,j=0;j<=9;j++) tbmn[i][j]=j*10000;





      unsigned j1,j2,j3,j4;


     for(j1=1;j1<=9;++j1) {                          

     if((tbpot[1][j1])==(tbmn[0][j1]))

        cout<
      }


      for(j2=1;j2<=9;++j2){

      for(j1=0;j1<=9;++j1) {                          

     if((tbpot[2-1][j1]+tbpot[2-1][j2])==(tbmn[1][j2]+tbmn[0][j1]))

        cout<
      }

      }


      for(j3=1;j3<=9;++j3){

      for(j2=0;j2<=9;++j2){

      for(j1=0;j1<=9;++j1){

        if((tbpot[2][j1]+tbpot[2][j2]+tbpot[2][j3])==(tbmn[2][j3]+tbmn[1][j2]+tbmn[0][j1]))

        cout<
        }

        }

        }


      for(j4=1;j4<=9;++j4){  

      for(j3=0;j3<=9;++j3){

      for(j2=0;j2<=9;++j2){

      for(j1=0;j1<=9;++j1){

        if((tbpot[3][j1]+tbpot[3][j2]+tbpot[3][j3]+tbpot[3][j4])==(tbmn[3][j4]+tbmn[2][j3]+tbmn[1][j2]+tbmn[0][j1]))

        cout<

        }

        }

        }

        }  


                cin.get();


}

Pozdrawiam


(lukasz_n) #2

Dziękuję za komentarz, mi też ten program wydał się od razu dość nieczytelny i pogmatwany. Jednakże nie znalazłem niczego lepszego, co by realizowało to założenie.


(Marcin Obala) #3
#include

#include


using namespace std;

#define N 6

#define System 10

#define Czy_skumulowany true // jeśli false to sprawdza tylko liczby N cyfrowe, jeśli true to wszystkie od 0 do N cyfrowych.

int main()

{

	int Gorna_granica = (int)pow((double)System,N)-1;

	int dolna_granica = 0;

	if(!Czy_skumulowany)

		dolna_granica = (int)pow((double)System,N-1);

	for(int i=dolna_granica;i
	{

		int liczba_do_spr = i;

		int ilosc_cyfr=0;

		for(ilosc_cyfr=0;liczba_do_spr>0;ilosc_cyfr++)

		{

			liczba_do_spr = liczba_do_spr / 10; 

		}

		if (ilosc_cyfr==0)

			ilosc_cyfr=1; 


		int * cyfry = new int[ilosc_cyfr];

		int liczba = i;

		int ktora_cyfra=ilosc_cyfr;

		int liczba_do_przeliczenia=liczba;

		while(--ktora_cyfra>=0)

		{

			cyfry[ktora_cyfra] = liczba_do_przeliczenia%System;

			liczba_do_przeliczenia/=System;

		}

		int liczba_potega=0;

		for(int j=0;j
		{

			liczba_potega += (int)pow((double)cyfry[j],ilosc_cyfr);

		}


		if(liczba_potega == liczba)

			cout << liczba << endl;

	}


	cin.get();

	cin.get();

}

Jeśli dobrze zrozumiałem zagadnienie.


(lukasz_n) #4

@Marcin O to chodziło, powiedz mi tylko proszę jak ograniczyć program by pokazywał liczby 1,2,3 i 4 cyfrowe, a większych już nie.

Pozdrawiam


(Marcin Obala) #5

Ojj to widzę że w ogóle nie programujesz skoro nie umiesz tego zmienić. U góry masz define.


(lukasz_n) #6

Rzeczywiście, przepraszam, z programowaniem nie mam za wiele wspólnego (obecnie). W każdym razie bardzo Ci dziękuję.