되는대로 살자

[C언어 기출문제&풀이] 정보올림피아드 본문

2009~2014/C/C++

[C언어 기출문제&풀이] 정보올림피아드

malu 2010. 11. 1. 17:57

다음은 어떤 프로그램의 일부이다. 이 부분을 실행시킨 후 m의 값은?

a[1]=1;
for(i=2;i<=100;i++)
    a[i]=a[i/2] + 1;

풀이
i값의 변화 = 1 2 3 4 5 ...
[i/2]값의 변화 = 0 1 1 2 2 3 3 4 4 5 5 6 6 ... -> i를 2로 나누므로 i가 2의 배수일 때 증가
a[i]값의 변화 =  1 2 2 3 3 3 3 4 4 4 4 4 4 4 4 5 5 5 ... -> i의 제곱수 마다 1 증가 (왜인지는 모르겠음 나중에 추가)

그러므로
a[1] = 1;
a[2],a[3] = 2;
a[4]~ a[7]  = 3; ( 여기서 '~'는 문법이 아닙니다. )
a[8]~ a[15] = 4;
a[16]~a[31] = 5;
a[32]~a[63] = 6;
a[64]~a[127] = 7;


따라서 a[100] = 7;