Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Kladné celé číslo označíme jako „dobré“, jestliže je dělitelné beze zbytku každou svou cifrou. Například číslo 612 je dobré, neboť je dělitelné šestkou, jedničkou i dvojkou. Naproti tomu číslo 512 není dobré, jelikož není dělitelné pěti. Napište program, který pro dané kladné celé číslo N (N není větší než 10000) určí počet všech dobrých čísel z intervalu od 1 do N (včetně). Používejte standardní vstup a výstup.
Příklad vstupu:
25
Odpovídající výstup:
14
Vysvětlení:
V uzavřeném intervalu od 1 do 25 leží těchto 14 dobrých čísel:
1 2 3 4 5 6 7 8 9 11 12 15 22 24
rogram dobracisla; var d,s,a,e,c:integer; procedure pocetcifer(a:integer); const m=ln(10); var z,x,e,f,d,c:integer;y,q:real; begin z:=abs(a); y:=ln(z); q:=y/m; x:=Trunc(q); e:=round(exp(x*m)); end; begin read(a); c:=0 ; begin repeat pocetcifer(a); s:=round(e/10); while s<>1 do begin d:=(a mod e); d:=a div d; if (a mod d) =0 then s:=(s div 10) ; if (a mod s*10)=0 then begin c:=c+1; a:=a-1; end else a:=a-1; end; until a<>0; end; write(c); end.
nemůžete mi poradit proč to nejede ?
Offline
↑ Mr.Pinker:
já teda se v tom tvém programu moc nevyznám, ale asi bych to dělal tak, podle cifer bych určoval jestli je dělitelné nebo ne... nevím jestli je to nejlepší způsob, ale myslím si že by to jít mohlo... teda nevím jestli v pascalu funguje něco jako switch, a taky nevím jestli to třeba není pomalejší jak takto, ale napadlo mě
pro číslo 2 musí celé číslo končit cifrou dělitelnou 2mi bezezbitku
pro 3 musí být součet cifer dělitelný 3mi bezezbitku
pro 4 poslední dvojčíslí dělitelné 4mi bezezbitku
pro 5 končit 0 nebo 5
pro 6 dělitelné 2kou a 3kou
pro 7 (to neznám žádnou poučku:(, ale našel jsem
je-li rozdíl součtu lichých a sudých trojic cifer dělitelný 7
a
je-li sedmi dělitelný součet vypočtený tak, že se první až n-tá číslice od zadu vynásobí postupně čísly (periodicky se opakujícími): 1, 3, 2, 6, 4, 5
) takže to stejně musíme vydělit
pro 8 poslední trojčíslí musíme dělit a musí být bezezbitku dělitelné
pro 9 jeli součet cifer dělitelný devíti
a číslo které obsahuje 0 není jí dělitelnou
takže bych si z čísla získal jednotlivé cifry
a pak podle potřeby bych testoval jednotlivé testy (možná budou ryhlejší)
taky je jasné že pokud n bude větší jak 10, tak máš jistých 9 číslic, které jsou dělitelné a můžeš rovnou začít od 11cky
nad 20 stačí najít 1. dělitelný a pak skákat po 2 a testovat jestli je to pravda i s tou poslední číslicí (nad 20 ku jsou dobrá čísla jen 22 a 24)
u 30ti to tak udělat taky u 40ti taky můž skákat po 4řech od 1.správného (je to jen 44,48)
no kdyby jsi ještě nestíhal tak se zkusím kouknout na to ještě podrobněji... a nějaký den v týdnu ti prozradím co jsme vymyslel... (třeba tam je nějaká pravidelnost)
jako obecně se dá říci že když začínáš novou desítku, tak musíš jednotky mít stejné jako desítky, a to platí od 10 do 100 (tedy 11,22,33,44,55,66,77,88 a 99 jsou první, které splňují podmínky)
Offline
↑ Mr.Pinker:
To vás ve škole neučili, že má mít zdrojový kód nějakou úpravu?
EDIT: 10.6.2013 Označeno za vyřešené pro neaktivitu.
Offline