Kezdőoldal » Számítástechnika » Programozás » Hogyan csináljam meg ezt a...

Hogyan csináljam meg ezt a feladatot? Egyszerűen nem értem ezt az egész matek példát. Ha érteném biztos le tudnám programozni.

Figyelt kérdés

6.8. Írjon egy programot, ami adott a és b egész korlátok esetén összeadja a 3 és 5 korlátok közé eső

többszöröseit.

Vegyük például az a=0, b=32 t

Ÿ az eredménynek 0 +15 +30 = 45 nek

kell lenni.

Módosítsa úgy a programot, hogy az adja össze a 3nak

vagy az 5nek

az a és b határok közé eső

többszöröseit. A 0 és 32 határokkal az eredménynek : 0 + 3 + 5 + 6 + 9 + 10 + 12 + 15 + 18 + 20 + 21 +

24 + 25 + 27 + 30 = 225 nek

kell lenni.



Egy plusz kérdést engedjetek meg.

Melyiknek van jövője?

python 2 vagy 3


Hol alkalmaznak leginkább python programozókat?


2012. aug. 3. 11:22
 1/7 anonim ***** válasza:
az [a,b] intervallumban az összes 3-al es/vagy 5-el oszthato szamot össze kelll adni
2012. aug. 3. 11:30
Hasznos számodra ez a válasz?
 2/7 Srapnel ***** válasza:

Az első feladatban a 15-tel oszthatóakat kell kiírni egy intervallumon belül.


Tehát kell egy ciklus, amelyben a ciklusváltozó 15-ösével lép, a ciklus felső határa pedig "b".


A ciklusváltozó kezdőértéke pedig "a" tizenöttel való osztásának felkerekítése visszaszorozva 15-tel.


Az egész kb. ilyen:


int s = 0;

for(int i = ceil(a/15)*15; i < b; i+=15) s+=i;


A másik feladat az előzőből származtatható:


int s = 0;

for(int i = ceil(a/3)*3; i < b; i+=3) s+=i;

for(int i = ceil(a/5)*5; i < b; i+=5) s+=i;

for(int i = ceil(a/15)*15; i < b; i+=15) s-=i;


Előszőr az összes 3-mal oszthatót adjuk össze, aztán hozzáadjuk az összes 5-tel oszthatót, de a 3-mal és 5-tel oszthatóakat viszont 2x számoltuk így, ezért a 15-tel oszthatóakat meg levonjuk.


Ennyi.

2012. aug. 3. 11:47
Hasznos számodra ez a válasz?
 3/7 A kérdező kommentje:

Mindegy ezt nem értem túl bonyolult nekem.

Még soha nem számoltam ilyet.

2012. aug. 3. 11:56
 4/7 Srapnel ***** válasza:

Jó, nézzük az elsőt.


A feladat az, hogy az [a, b] intervallumba eső összes 3-mal és 5-tel egyszerre osztható számok összegét kell meghatározni.


Ami 3-mal és 5-tel is osztható, az valójában 15-tel osztható, tehát 15-nek az intervallumba eső többszöröseinek összegét kell meghatározni.


Igazából sokat programozni sem kell: az 'a' és 'b' közé eső 15-tel osztható számok összegét megkaphatjuk úgy, hogy vesszük a 0 és 'b' közé esők összegét és ebből kivonjuk a 0 és 'a' közé esők összegét. Ha nem 15-tel oszthatókat néznénk, hanem mondjuk 3-mal oszthatóakat, akkor itt egy sorozat:


0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, ...


Ha most a 10 és 20 közé esőket kell összeadni, akkor az úgy is kijön, hogy 20-ig az összeset összeadod, majd 10-ig és ez utóbbit kivonod:


0 + 3 + 6 + 9 + 12 + 15 + 18

- 0 + 3 + 6 + 9

= 12 + 15 + 18


Tehát csak a 10 és 20 közöttiek összege marad eredménynek. Na, ez ugyanúgy működik akkor is, ha nem 10 és 20 között kell, hanem a és b között, meg akkor is, ha nem hárommal nő a sorozat, hanem 15-tel.


Tehát ha lenne egy képlet, ami az előző két összeget kiszámolja, akkor azokat kivonva megvan az eredmény.


Na, az összeg kiszámításán nem kell gondolkodni, a wikipedia ( [link] alapján:


s = d*n*(n-1)/2


Ahol s az összeg, d a növekmény (a feladatban 15), n a sorozat tagjainak száma.


Nekünk azonban nem a sorozat tagjainak száma, hanem a sorozat vége van inkább meg. Pl. az, hogy a=0 és b=32.


Meg kell tehát nézni, hogy b-ben hányszor van meg a 15. Ez a b/15 egészrésze lesz. a-ra ugyanez. A sorozat eleme még a 0, tehát az egészrészhez még egyet hozzá kell adni.


Tehát pl. a 32-ben a 15 kétszer van meg, de mivel a 0 is a sorozat tagja (ld: 0, 15, 30), ezért n=3. a-ra ugyanígy kijön a hozzá való n.


Tehát a képlet, ami az egész eredményt megadja ("nagy" sorozat összegéből kivonva a "kis" sorozat összegét, ld. fönt):


s = d(nb-1)nb/2 - d(na-1)na/2


ahol d a 15, nb és na a b-ig és a-ig lévő tagok száma az összegben:


na = egész(a/d) + 1

nb = egész(b/d) + 1


Ennyi.


Ellenőrizzük le! Helyettesítsük az alábbiakat a feladatból:


d=15, a=0, b=32


tehát akkor

na = 0/15 + 1 = 1

nb = 32/15 + 1 = 2 + 1 = 3


A nagy képletbe beírva:


s = 15(3-1)3/2 - 15(1-1)1/2 = 45 - 0 = 45


Ha ennyiből nem érted, akkor a programozást hagyd inkább, boldogabb leszel más szakmával.

2012. aug. 3. 15:39
Hasznos számodra ez a válasz?
 5/7 Srapnel ***** válasza:

A másodikhoz az előbbi képletet használhatjuk, nevezzük el mondjuk s-nek:


s(d, a, b) = ...


Az előző példában s(15, 0, 32) szerepelt.


Ha a 3-mal vagy 5-tel oszthatók kellenek (tehát nem 3-mal és 5-tel egyszerre oszthatók), akkor


S3 = s(3, a, b)

S5 = s(5, a, b)


Viszont így a 15-tel oszthatókat 2x számoltuk bele az összegbe, azokat le kell vonni:


S = s(3, a, b) + s(5, a, b) - s(15, a, b)


Ennyi.


Ellenőrzés:


S = s(3, 0, 32) + s(5, 0, 32) - s(15, 0, 32)


s(3, 0, 32) = 3*11*(11-1)/2 - 0 = 165

s(5, 0, 32) = 5*7*(7-1)/2 - 0 = 105


S = 165 + 105 - 45 = 225

2012. aug. 3. 15:48
Hasznos számodra ez a válasz?
 6/7 _Jessy_ ***** válasza:
Eléggé nyakatekert egy feladat :)
2012. aug. 3. 16:12
Hasznos számodra ez a válasz?
 7/7 SimkoL ***** válasza:

Igaz ez Pascal:


Program Szamol;

uses Crt;

var i, i1 : integer;

begin

i:=0;

i1:=0;

for i:=0 to 32 do

if ((i mod 3)=0) or ((i mod 5)=0)

then i1:=i1+i;

WriteLn(i1);

Readkey;

end.


Elég egyszerű nem ?

2012. aug. 3. 19:55
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!