Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Ciąg c++ / sito erastostelesa poszukiwanie dzielnikow wszystkich liczb

Ostatnio zmodyfikowano 2014-12-02 22:52
Autor Wiadomość
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;
}
P-121984
darko202
» 2014-12-02 20:20:17
C/C++
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  -  
P-121990
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 :)
P-122007
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

C/C++
if( i % j == 0 )
{
    cout << j << endl;
    licznik++;
}
P-122025
« 1 »
  Strona 1 z 1