Ciąg c++ / sito erastostelesa poszukiwanie dzielnikow wszystkich liczb
Ostatnio zmodyfikowano 2014-12-02 22:52
TH1M Temat założony przez niniejszego użytkownika |
Ciąg c++ / sito erastostelesa poszukiwanie dzielnikow wszystkich liczb » 2014-12-02 20:02:26 Witam :D Mam malutki problem, a mianowicie w moim zadaniu ze znalezieniem ciągu malejącego znajduje go, wskazuje jaką ma długość lecz nie wiem za bardzo jak wskazać na jakiej pozycji się on zaczyna a na jakiej kończy? Naprowadzi ktoś ? :D
Oto to co mam:
#include <iostream> using namespace std; int main() { int i=0, max=1, j=1; float tmp[10]={1,2,6,5,4,3,2,5,6,4}; int end=0; int start=0; for(i=0; i<=9; i++) { if(tmp[i+1]<tmp) { j=j+1; end=j; } else { if(j>max) max=j; } }
cout<<"Dlugosc wynosi: "<<max<<endl; cout<<"Start="<<start<<" End="<<end<<endl; } |
|
darko202 |
» 2014-12-02 20:20:17 for( i = 0; i <= 9; i++ ) { if( tmp[ i + 1 ] < tmp ) { j = j + 1; end = j; } else { if( j > max ) max = j; }
1. jeśli sprawdzisz j to zauważysz że ono ciągle rośnie j=j+1; - to jeszcze nie jest rozwiązanie przedstawionego zadania (ciąg malejący) 2. w odpowiedzi na Twoje pytanie - musisz zapamiętać miejsce pierwszego i ostatniego spełnienia warunku 3. nie zapomnij że w tablicy może być kilka takich ciągów np. 5 1 6 2 7 5 8 1 8 2 - |
|
TH1M Temat założony przez niniejszego użytkownika |
» 2014-12-02 21:30:08 Dzięki za pomoc! Problem został rozwiązany natomiast mam jeszcze jedno pytanko :) Korzystając z sita erastostelesa musze znaleźć wszystkie dzielniki, kazdej liczby z przedziału do n różniące się od 1 i samej siebie ;)
Dotychczasowy algorytm : { int i, j, n, k, l=0; bool t[1025]; cout<<"Podaj maksymalna wartosc przedzialu: "; cin>>n; for (i=0; i<=n; i++) { t=true; for(j=2; j<=n;j++) { if(i%j==0&&j!=i) l++; } } for (i=2; i<=sqrt(n); i++) { if (t==true) for (j=i+i; j<=n; j=j+i) t[j]=false; } for (i=2; i<=n; i++) if (t==true) cout<<setw(3)<<i<<" jest liczba pierwsza"<<l<<endl;
}
Prosiłbym o jakieś wskazówki co należy zmodyfikować :) Z góry wieeelkie dzięki za pomoc :) |
|
Tomek_z_W11 |
» 2014-12-02 22:52:41 t = true; miałeś na myśli t[ i ] = true; ? Tam gdzie sprawdzasz czy liczba jest podzielna (reszta z dzielenia ma wartość 0) możesz, oprócz zwiększania licznika, wyświetlić te liczbe, na przykładzie, jeżeli 6 dzieli 12, to wyświetl 6 if( i % j == 0 ) { cout << j << endl; licznik++; }
|
|
« 1 » |