c) Wypisz wszystkie liczby z pliku cyfry.txt, których cyfry tworzą ciąg rosnący.A więc musimy sprawdzić czy kolejne cyfry liczby tworzą ciąg rosnący, mamy ułatwione zadanie gdyż podpunkt b dzieli nam liczbę na cyfry tylko że liczy jej sumę, my musimy sprawdzić czy kolejna cyfra jest mniejsza od poprzedniej. Dotychczasowa pętla wygląda tak:
Przykład:
Cyfry liczby 123579 tworzą ciąg rosnący, ponieważ 1<2<3<5<7<9.
Cyfry liczby 1232 nie tworzą ciągu rosnącego, ponieważ ostatnia cyfra (2) nie jest
większa od przedostatniej (3).
Cyfry liczby 34556 nie tworzą ciągu rosnącego, ponieważ cyfra trzecia (5) i cyfra
czwarta (5) są sobie równe.
for(int i=0;i<1000;i++)
{
cin >> liczba;
if(liczba%2==0)parzyste++;
while(a>0)
{
b=a/10;}
a%=10;
suma+=a;
a=b;if(i==0){najmniejsza=suma;punktB[1]=liczba;} if(suma>=najwieksza){punktB[0]=liczba;najwieksza=suma;}
Pamiętamy, że a na pewnym odcinku staje się naszą cyfrą, aby sprawdzić czy jest mniejsza od poprzedniej potrzebujemy dodać zmienną:}else if(suma<najmniejsza){punktB[1]=liczba;najmniejsza=suma;}
unsigned short int a2=9;Musimy także dodać tablicę którą określiliśmy w pierwszej części:
unsigned long int * rosnie;Dodatkowo określmy zmienną typu logicznego która będzie sprawdzała czy zmienna a2 jest większa od a:
rosnie = new unsigned long int[1001];
bool wiekszaa2=true;Oraz przydałby nam się licznik liczb które mają ciąg rosnący:
unsigned long int k=0;Określiliśmy potrzebne zmienne teraz wystarczy sprawdzać czy a jest większa od a2 jeżeli jest to wtedy liczba nie posiada ciągu rosnącego. Wystarczy w pętli while przed:
suma+=a;dodać:
if(a>a2)wiekszaa2=false;I już mamy warunek sprawdzający czy nie wystąpił fałsz czyli w naszym przypadku czy zmienna a nie była większa od poprzedniej a(a2).
a2=a;
Teraz musimy napisać tylko warunek czy wiekszaa2 jest prawdziwa, dodać do tablicy naszą liczbę oraz zwiększyć licznik o 1:
if(wiekszaa2==true){rosnie[k]=liczba;k++;};
Dodatkowo resetujemy zmienną:
wiekszaa2=true;Wypisanie będzie wyglądać tak:
cout << "c ";Tak oto skończyliśmy cały program, trochę to zajęło ale praktyka czyni mistrza. W najbliższych tygodniach spróbuje napisać kurs programowania, oczywiście nadal będą się pojawiać tego typu zadania bądź tutoriale np. z javascriptu.
if(k>0)for(int i=0;i<=k-1;i++)cout << rosnie[i] << " ";
Ostateczny kod programu:
#include<iostream>Do przeczytania(?)!
using namespace std;
int main()
{
unsigned long int liczba,parzyste=0,punktB[2],suma=0,a=0,b=0,k=0,najwieksza=0,najmniejsza=0;//dodajemy nowe zmienne
unsigned short int a2=9;
unsigned long int * rosnie;
rosnie = new unsigned long int[1001];
bool wiekszaa2=true;
punktB[0]=1;
punktB[1]=1;
for(int i=0;i<=1000;i++)
{
cin >> liczba;
if(liczba%2==0)parzyste++;
a=liczba;
while(a>0)
{
b=a/10;
a%=10;
suma+=a;
if(a>a2)wiekszaa2=false;
a2=a;
a=b;
}
if(wiekszaa2==true){rosnie[k]=liczba;k++;};
wiekszaa2=true;
if(i==0){najmniejsza=suma;punktB[1]=liczba;}
if(suma>najwieksza){punktB[0]=liczba;najwieksza=suma;}
if(suma<najmniejsza){punktB[1]=liczba;najmniejsza=suma;}
suma=0;
}
cout << "a " << parzyste << endl;
cout << "b " << punktB[0] << " " << punktB[1] << endl;
cout << "c ";
if(k>0)for(int i=0;i<=k-1;i++)cout << rosnie[i] << " ";
return 0;
}
Link do programu i danych:
http://speedy.sh/Rv7kg/zadanie4.exe
http://speedy.sh/nSXTr/cyfry.txt
Brak komentarzy:
Prześlij komentarz