pallaw Temat założony przez niniejszego użytkownika |
Potrzebna pomoc w realizacji programu » 2010-11-06 22:02:35 Potrzebuje pomocy. Z taki programikiem ... który szuka liczb w zakresie od 1 do 1000, które są podzielne przez sumę swoich cyfr. Nie liczę na gotowca tylko na nakierowanie toku myślenia co z tym zrobić by miało ręce i nogi ;) Z góry dziękuję za pomoc ;)
oto co udało mi sie napisać..
KOD:
#include <iostream.h>
int main() { int a[10]={0,1,2,3,4,5,6,7,8,9};// tablica 10 elementowa int b[10]={0,1,2,3,4,5,6,7,8,9}; int c[10]={0,1,2,3,4,5,6,7,8,9}; int d,x,wynik; x=a*100+b*10+c; // program ma podstawić wszystkie liczby z tablicy po okleji np.001 d=a+b+c; // ma dodac liczby które wczesniej sobie pobrał z tablicy czyli 0+0+1 x%d=wynik; // ma przypisać resztę z dzielenia mod i jeżeli liczba dzieli się bez reszty ma ja wipisać jeżeli liczba daje resztę ma ja ominąć wynik=0 then cout<<x ; // ta tyle na ile wpadałam.. system("PAUSE"); return EXIT_SUCCESS; }
|
|
F90M |
» 2010-11-06 22:29:42 Nie potrzebujesz żadnych tablic, wystarczy ci tylko jedna zmienna (licznik w pętli for).
Dodam jeszcze że w tym wypadku musisz wyłuskać 2 ostatnie cyfry, 100 i tak spełni warunek chociaż jeśli mus to możesz sprawdzać 3 cyfry. Aby sprawdzić ostatnią cyfrę chyba wiesz przez jaką liczbę musisz wykonać dzielenie modulo. Co do 2 od końca cyfry, pomyśl co możesz zrobić z liczbą którą sprawdzasz i ostatnią cyfrą (którą otrzymałeś przez wcześniejsze obliczenie). |
|
ison |
» 2010-11-06 22:39:50 @pallaw powtórz sobie podstawy programowania bo masz tam sporo błędów gotowiec jakby kto chciał: #include <cstdio> #include <string>
int main() { for( int i = 1; i <= 1000; ++i ) { char * buff; int temp = 0; itoa( i, buff, 11 ); for( int j = 0; j < strlen( buff ); ++j ) { temp += buff[ j ] - 48; } if( !( i % temp ) ) printf( "%d\n", i ); delete[] buff; } }
jeśli pracujesz na windowsie i chcesz zobaczyć wynik to dopisz tuż przed końcem while(1) (lub system("pause")) aby zatrzymać program |
|
F90M |
» 2010-11-06 22:58:13 ison z armatą na komara? |
|
ison |
» 2010-11-07 00:40:17 @F90M hmmm? dlaczego? jest prostsze rozwiązanie? |
|
F90M |
» 2010-11-07 08:26:36 Oczywiście, chociażby coś takiego: #include <iostream> int main() { int iWynik, iTemp; for( int iLiczba = 1; iLiczba <= 1000; ++iLiczba ) { iTemp = iLiczba; while( iTemp ) { iWynik += iTemp % 10; iTemp /= 10; } if( !( iLiczba % iWynik ) ) std::cout << iLiczba << "\n"; iWynik = 0; } } Nie potrzeba dołączać żadnych dodatkowych bibliotek i funkcji. Można to też zrobić używając jednej zmiennej (niezbyt elegancko, ale można :) dla małej liczby obiegów) #include <iostream> int main() { for( int n = 1; n <= 1000; ++n ) if( !( n %( n % 10 +( n / 10 ) % 10 +( n / 100 ) % 10 +( n / 1000 ) % 10 ) ) ) std::cout << n << "\n"; } choć pierwszy kod jest zdecydowanie bardziej elastyczny, przejrzysty. |
|
pallaw Temat założony przez niniejszego użytkownika |
dzięki » 2010-11-07 12:01:09 Więc tak chcę dodać, że nie jestem świetna z programowania bo miałam dopiero 4 ćwiczenia (w C) a na wykładach jesteśmy na budowie pętli (w turbo Pascalu) więc nie za bardzo idzie nam teoria z ćwiczeniami..Dlatego mam duże braki jeszcze.. Dlatego ison weź się nie czepiaj..:P -->nowicjusz jestem :) Hmm a co do programu F90M mam pytania.. dobra rozumiem program leci sobie po pętli for i bierze wszystkie liczby z zakresu od 1 do 1000. Następnie dana liczba jest przypisywana innej zmiennej która wrzucamy do pętli while w warunku mamy nasza liczbe.. iWynik += iTemp % 10; iTemp /= 10;
gdybyś mógł mi to wyjaśnić co robią te linijki była bym wdzięczna..
|
|
ison |
» 2010-11-07 13:01:48 @up liczba przy dzieleniu modulo (%) przez 10 zawsze da w wyniku ostatnią cyfrę liczby zatem aby zsumować cyfry liczby 567 należy wykonać następujące operacje: 567 modulo 10 = 7 (ostatnia cyfra - dodajemy ją do wyniku) 567 / 10 = 56 (obcinamy ostatnią cyfrę przez podzielenie liczby przez 10) 56 modulo 10 = 6 (ostatnia cyfra - dodajemy ją do wyniku) 56 / 10 = 5 (obcinamy ostatnią cyfrę) 5 modulo 10 = 5 (ostatnia cyfra - dodajemy ją do wyniku) 5 / 10 = 0 (kończymy pracę, dodaliśmy wszystkie cyfry) tym sposobem otrzymaliśmy sumę cyfr liczby 567 iWynik += iTemp % 10; to dodawanie do zmiennej iWynik ostatniej cyfry liczby iTemp; powyższy zapis jest równoznaczny z zapisem iWynik = iWynik + iTemp % 10; iTemp /= 10; to dzielenie liczby iTemp przez 10 (czyli obcinanie ostatniej cyfry) powyższy zapis jest równoznaczny z zapisem iTemp = iTemp / 10; F90M w pętli while cały czas dodawał ostatnią ostatnią cyfrę i potem ją obcinał tak długo aż liczba, z której bierze cyfry będzie równa 0 zapis while( iTemp ) jest równoznaczny z zapisem while( iTemp != 0 ) czyli pętla będzie wykonywana dopóki zmienna iTemp będzie różna od 0 |
|
« 1 » 2 |