Mathematical and Physical Journal
for High Schools
Issued by the MATFUND Foundation
Already signed up?
New to KöMaL?

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:


#include
using 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