Wpis z mikrobloga

Mirki programiści - mam dla was zadanie.

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
  • 23
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@murvs: pierwsza opcja całkiem niezła chyba

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ć
  • Odpowiedz
@murvs: określ tablice podzielnych przez 3 i podzielnych przez 5, sprawdzaj czy item jest w których tablicach ;) (troche toporne ale działa)
  • Odpowiedz
@krsQ: Już wyjaśniam o co chodzi.

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
  • Odpowiedz
@Attrazione:

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.
  • Odpowiedz
@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".
  • Odpowiedz
@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).
  • Odpowiedz
@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ę.

@Wozyack: podbnie do propozycji,
  • Odpowiedz