Hej, znalazłem myślę ciekawe zadanie do poćwiczenia rzeczy, które nie specjalnie ogarniam, jak m.in. dynamiczna alokacja pamięci, wskaźniki, i rekurencja i rekurencja i rekurencja…
Zadanie ze spoja, lecz nie zależy mi na jego zaliczeniu(jeszcze), lecz na samym poprawnym funkcjonowaniu programu.
W mojej glowie program ma wygladc nastepujaco. Pobieramy liczby do tablicy --> sprawdzamy ktora z nich jest najwieksza --> wywolanie funkcji rekurencyjnej, która sprawdza czy modulo największej liczby przez resztę liczb daje 0, jesli tak zwracamy ta liczbę, jeśli nie dodajemy ją do niej od nowa.
#include <iostream>
using namespace std;
int nww(int *tab, int m,int y);
int main()
{
int x,y;
cin>>x;
while(x--)
{
cin>>y;
int *tab=new int [y];
for(int i=0; i<y; i++)
{
cin>>tab[i];
//cout<<"liczba "<<i+1<<" to: " <<tab[i]<<" "<<endl;
//cout<<tab[i]<<endl;
}
int maximum=tab[0];
//cout<<maximum<< " ";
for(int i=1; i<y; i++)
{
if(tab[i]>maximum)
{
maximum=tab[i];
// cout<<maximum<< " ";
}
}
// Do tego momentu raczej jest ok.
// cout<<nww(tab,maximum,y);
delete [] tab;
// cout<<"Najwiesza liczba to: "<< maximum<<endl;
cout<<"NWW wynosi: "<<nww(tab,maximum,y);
}
return 0;
}
int nww(int *tab,int m,int y)
{
//cout <<m<<" ";
int poz=0;
for(int i=0; i<y; i++)
{
if(m%tab[i]==0)
{
poz=1;
//cout<<poz<<' '<<m<< " ";
}
else
{
poz=0;
i=y;// z checia zamienil bym na break, jezeli ktos wie jak
}
}
if(poz==1) {return m; }// przypadek podstawowy
else return nww(tab,m+m,y);
}
Chciałbym pomocy w zrozumieniu dlaczego to nie działa i czy da sie tam wrzucic break.
Pozdrawiam