Należy napisać w dowolnym języku program, który wypisze liczby od 1 do 100, ale jeżeli dana liczba jest podzielna przez 3, to wypisze on "podzielna przez 3", jeżeli jest podzielna przez 5 to wypisze on "podzielna przez 5", a jeżeli i przez 5 i przez 3, to "podzielna przez 3 i 5"...
...ale to nie takie proste - zakładamy, że już macie podstawy w programowaniu i że wiecie, że podzielność najłatwiej sprawdzić sprawdzając czy reszta z dzielenia liczby przez 3/5 == 0, ale nie macie pojęcia, że możecie użyć modulo w języku programowania :)
Jak to zrobić nie używając modulo?
Moje pomysły (nie idzie mi dzisiaj myślenie):
- wykorzystać rozdzielność dzielenia względem odejmowania - odejmować od liczby po 3, dopóki nie uzyskacie 2, 1 albo 0 - jeżeli 0 to podzielna, jak nie to nie. Analogicznie dla podzielności przez 5.
- zadeklarować ręcznie tablicę stuelementową z zawartością, ale ten pomysł odrzucamy, bo sami wiecie...
I nie, nie jest to zadanie z żadnej uczelni/szkoły itp. Wszystkie chwyty dozwolone.
Dostałem to zadanie na rozmowie kwalifikacyjnej (na praktykanta IT; do naskrobania na kartce w pseudokodzie). Koleś po zobaczeniu mod powiedział, że już widzi, że dobrze, bo użycie mod było kluczowe w tym teście. Popatrzyłem na niego ze zdumieniem i zapytałem, jak można to zrobić inaczej, a on odpowiedział tajemniczo - 'różne rzeczy już widziałem'. Najpierw się śmiałem w duchu, jakich to nieogarów musiał on
if(n==((n/3)*3) to dzieli sie przez czy Operujemy na intach, zatem wynik dzielenia zawsze jest rzutowany na typ całkowity (obcinana jest niecałkowita końcówka). Gdy taki "wybrakowany wynik" przemnożymy przez trzy nie dostaniemy wartości z początku.
@murvs: Weź sobie ustaw dwa liczniki - jeden niech liczy do 3, drugi do 5. Jak któryś się wyzeruje, to walnij napis "jest podzielna przez...", a jak w danej pętli oba się wyzerują, walnij "jest podzielna przez 3 i 5".
@murvs: niezbyt duże wymagania mają, jak dają takie zadania. Nie wiem jak jest w innych szkołach, ale u mnie na mat-infie w liceum się robiło takie rzeczy (co prawda w Pascalu, ale jednak).
@nietrzymryjskiowczarek: Zią, nie musisz mi nic pisać, rzuć różne pomysły. Uznaję to zadanie za oczywiste i faktycznie pisałem takie rzeczy w gimbie ( @ortofosforan ). Szukałem nietypowych rozwiązań + lekko użalałem się nad stanem wiedzy studentów, którzy musieli kombinować.
@Wiceps - przeczytałeś do końca? Główny problem to jak w wesoły sposób sprawdzić, czy liczba jest podzielna przez inną liczbę.
Należy napisać w dowolnym języku program, który wypisze liczby od 1 do 100, ale jeżeli dana liczba jest podzielna przez 3, to wypisze on "podzielna przez 3", jeżeli jest podzielna przez 5 to wypisze on "podzielna przez 5", a jeżeli i przez 5 i przez 3, to "podzielna przez 3 i 5"...
...ale to nie takie proste - zakładamy, że już macie podstawy w programowaniu i że wiecie, że podzielność najłatwiej sprawdzić sprawdzając czy reszta z dzielenia liczby przez 3/5 == 0, ale nie macie pojęcia, że możecie użyć modulo w języku programowania :)
Jak to zrobić nie używając modulo?
Moje pomysły (nie idzie mi dzisiaj myślenie):
- wykorzystać rozdzielność dzielenia względem odejmowania - odejmować od liczby po 3, dopóki nie uzyskacie 2, 1 albo 0 - jeżeli 0 to podzielna, jak nie to nie. Analogicznie dla podzielności przez 5.
- zadeklarować ręcznie tablicę stuelementową z zawartością, ale ten pomysł odrzucamy, bo sami wiecie...
I nie, nie jest to zadanie z żadnej uczelni/szkoły itp. Wszystkie chwyty dozwolone.
#programowanie #taguje
można też dzielić n/3 i sprawdać czy wynik jest liczbą całkowitą (na pewno jest jakaś funkcja do tego)
a jeśli nie ma to można zrobić
zastosować jakąś pętle liczące co 3 i co 5?
Dostałem to zadanie na rozmowie kwalifikacyjnej (na praktykanta IT; do naskrobania na kartce w pseudokodzie). Koleś po zobaczeniu mod powiedział, że już widzi, że dobrze, bo użycie mod było kluczowe w tym teście. Popatrzyłem na niego ze zdumieniem i zapytałem, jak można to zrobić inaczej, a on odpowiedział tajemniczo - 'różne rzeczy już widziałem'. Najpierw się śmiałem w duchu, jakich to nieogarów musiał on
if(n==((n/3)*3)to dzieli sie przez czyOperujemy na intach, zatem wynik dzielenia zawsze jest rzutowany na typ całkowity (obcinana jest niecałkowita końcówka). Gdy taki "wybrakowany wynik" przemnożymy przez trzy nie dostaniemy wartości z początku.
Komentarz usunięty przez autora
1 ^ 3 == 2; 2 ^ 3 == 1; 9 ^ 3 == 10 # nie działa@murvs
@Wiceps - przeczytałeś do końca? Główny problem to jak w wesoły sposób sprawdzić, czy liczba jest podzielna przez inną liczbę.
@Wozyack: podbnie do propozycji,