Hogyan tudok erre a feladatra sima C programot írni?
A feladat a következő:
"Írjon egy teljes C programot, amely megkeresi és szabványos kimenetre írja azt a legnagyobb háromjegyű számot, melynek számjegyösszege megegyezik a prímtényezőinek összegével. (pl. 378=2*3*3*3*7, ezek összege 18, ami egyenlő a jegyek összegével is).
A két feladat külön-külön gyerekjáték, de ez okoz némi fejtörést számomra. Csak most tanulom és egy kis segítségre lenne szükségem, mert elakadtam benne. Makacs vagyok és nem tudok továbblépni a következő feladatra, amíg ezt nem sikerül megoldani. Valahogy a Brute force módszerrel gondolkoztam, hogy 100-tól ezerig vizsgálnánk meg a számokat egyesével, de a szám értéke mindig megváltozik, mire 100-ról 101-re ugorhatnék vele. Érzem, hogy közel járok, de kell a segítség. Van akinek ez a kisujjába van.
"a szám értéke mindig megváltozik, mire 100-ról 101-re ugorhatnék vele."
He?
"külön-külön gyerekjáték"
Akkor már csak azt kell megnézni egy számnál, hogy a két eredmény egyenlő-e.
Hát azért ez nem rakétatudomány.
Mi a gond?
Egyetértek az előző - #2, #3, #4, #5 - hozzászólókkal: bontsd a feladatot részekre:
* Kell egy függvény (nevezzük sumOfDigits-nek), aminek bemenő paramétere egy egész szám, visszaadott értéke megadott szám számjegyeinek összege.
* Kell egy másik függvény (nevezzük sumOfPrimeFactors-nak), aminek bemenő paramétere egy egész szám, visszaadott értéke megadott szám prímtényezőinek összege.
* A main függvényben pedig egy ciklussal végigiterálsz 999-től 100-ig.
A ciklusmagban pedig ellenőrzöd, hogy a szám számjegyeinek összege (sumOfDigits visszatérési értéke) megegyezik-e a a szám prímtényezőinek összegével (sumOfPrimeFactors visszatérési értéke). Ha igen, kiírod a ciklusváltozó értékét, és kilépsz a ciklusból (break).
Hali! Egy kicsit másként, de megoldottam a feladatot.
Lehet lehetne egyszerűbben, de nekem ez most sikerélmény, mert egyedül tudtam megoldani. Kíváncsi vagyok a véleményetekre
Nos:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a,szam,maradek,osszeg,primszam,oszto,tenyezo,posszeg;
a=1;
maradek=0;
osszeg=0;
oszto=2;
tenyezo=0;
posszeg=0;
printf("Adj meg egy szamot:\n");
scanf("%d",&szam);
printf("\nA SZAM:%5d",szam);
primszam=szam;
a=szam;
while(a>0){
szam=a;
printf("\nA SZAM ( %d ) 10-el valo osztasi maradekai:",a);
while(szam>0){
maradek=szam%10;
osszeg+=maradek;
szam/=10;
printf("\n%+10d",maradek);
}
printf("\n\nA szamjegyek osszege:\n%+10d",osszeg);
printf("\n\nA szam primtenyezos felbontasa:\n");
while(primszam>=oszto) {
if(primszam%oszto==0){
printf("%10d|%d\n",primszam,oszto);
primszam/=oszto;
posszeg+=oszto;
}
else oszto+=1;
}
printf("\nPrimtenyezok osszege:\n%10d\n",posszeg);
if(osszeg==posszeg){
printf("A legnagyobb szam, mely jegyeinek es primtenyezos felbontasanak osszege egyenlo:%d",a);
}
a--;
primszam=a;
maradek=0;
osszeg=0;
oszto=2;
posszeg=0;
}
return 0;
}
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!