Problem I. 496. (December 2019)
I. 496.
(10 pont)
Deadline expired on January 10, 2020.
Sorry, the solution is available only in Hungarian. Google translation
A megoldás a bemenetként kapott szám 2-es számrendszerbeli alakjából volt egyszerűen kiolvasható: az eltolások száma a szám legnagyobb 2-es számrendszerbeli kettő hatványának kitevője mínusz egy, az összeadás pedig a szám 2-es számrendszerbeli alakjában lévő 1-esek száma mínusz egy. (Az állítás teljes indukcióval egyszerűen igazolható.)
Az első mintamegoldás Kovács Alex, szegedi, 10-edik osztályos diák C++ nyelvű munkája:
#includeusing namespace std; int main(){ unsigned long long int n; cin >> n; //bemenet int i=0; //eltolás számláló int j=0; //összeadás számláló while(n){ //megpróbáljuk "visszafejteni" n-t eltolásokra és összeadásokra (pontosabban 2-es számrendszerbeli alakra) if(n%2) j++; //minden 1-es a 2-es számrendszerbeli alakban egy összeadást jelent n/=2; //leosztunk 2-vel (=eltolás jobbra) i++; //minden számjegy a 2-es számrendszerbeli alakban egy eltolást jelent } //az utolsó számjegy és az első 1-es nem számít, ezért mindkét számlálóból le kell vonnunk 1-et cout << i-1 << ' ' << j-1 << '\n'; //kimenet }
A második mintamegoldás Mályusz Etre Magnusz 11. osztályos budapesti versenyző megoldása:
def vmi(a): c = 0 d = 0 while (a != 1): if (a % 2 == 0): a /= 2 c += 1 else: a -= 1 d += 1 lista = [c,d] return lista a = int(input()) k = vmi(a) print(k[0],k[1])
Statistics:
11 students sent a solution. 10 points: Endrész Balázs, Horcsin Bálint, Kohut Márk Balázs, Kós Péter, Kovács Alex, Mályusz Etre Magnusz, Mócsy Mátyás, Nagy 793 Márton, Ürmössy Dorottya, Varga 225 Balázs. 7 points: 1 student.
Problems in Information Technology of KöMaL, December 2019