BME Villamosmérnöki és Informatikai Kar
Mérnök-informatikus alapszak |
Nappali tagozat
2013/2014-es tanév, őszi félév
|
Egy S>0 egész szám A>1 alapú összekevert változatát a következőképpen definiáljuk:
Írjon olyan programot Cékla nyelven (a C++ nyelv egy deklaratív
résznyelvén), amelynek fő függvénye az int
osszekevert(const int S, const int A){...}
függvény.
/* osszekevert(S, A) == SK, ha SK az S szám A alapú összekevert változata (S>0, A>1 egész számok). Egy S szám A alapú összekevertjét úgy kapjuk meg, hogy az S számot felírjuk az A alapú számrendszerben, a számjegyeit egy listával ábrázoljuk, a listát a fentiek szerint átrendezzük, majd a kapott lista elemeit egy A alapú szám jegyeinek tekintve előállítjuk a keresett értéket. */ int osszekevert(const int S, const int A) { ... }
A jobbrekurzív függvények kevesebb memóriát használnak, mint az egyéb rekurzív függvények, ezért a használatukat ajánljuk, azonban a pontozáskor csak azt vizsgáljuk, hogy a program a megadott (néhány másodperces) időkorláton belül előállítja-e a helyes megoldást.
Az alábbi mintamegoldás csak akkor működik helyesen, ha S < A4
:
int osszekevert(const int S, const int A) { if (S<A*A*A) return S; return ((S/A/A/A*A+S%A)*A+S/A%A)*A+S/A/A%A; }
|* osszekevert(1234, 10); 1432 |* osszekevert(12345, 10); 14325 |* 1011 |* osszekevert(12, 2); 9 // mert 122 = 1 1 0 0 és 92 = 1 0 0 1 |* osszekevert(1023, 10); 1320 |* osszekevert(38, 3); 46 // mert 383 = 1 1 0 2, és 463 = 1 2 0 1 |* osszekevert(46, 3); 38 |* osszekevert(183654729, 10); 123456789 |* osszekevert(18365472, 10); 12345678 |*
A programot az Elektronikus
Tanársegéd segítségével weben keresztül lehet beadni, a HF
beadás menüpont alatt. Ez a nulladik, Cékla nyelvű kis
házi feladat, ennek megfelelően az ETS a beküldött megoldást
khf0.cpp
néven tárolja el és hivatkozik rá.
(A feltöltendő állomány neve tetszőleges lehet, az ETS átnevezi.)
Az osztályzat megállapításakor a határidőre beadott, minden tesztesetet helyesen megoldó kis házi feladatért plusz 1 pont jár.