2013-12-11 1 views
0

에 상관 없음> 0 루프의 실행에서의 루프의 실행에서 만든 비교의 수는 무엇 다음 C 코드고려 주어진 코드

int j,n; //declaration 
j=1; //initialization 
while(j<=n) //while loop 
    j=j*2; //code ends here 

을 비교의 번호를 찾을 수 위의 코드?

나는 시도 다음 j의 증가는하자 pow(2,0), pow(2,1), pow(2,2) 등 일부 i의 값 그래서 질문은 무엇이 후

pow(2,i)<=n 
i<=(log n/log2) 

에 따라 들어? 대답은 floor(log n/log 2)+1이지만 어떻게? 코드가 정의되지 않은 것을

+1

당신이 j'와'n''거기에 따라 될 것입니다 얼마나 많은 루프 계산 하시겠습니까? –

답변

1

, 당신은 n의 값을 지정하지 않기 때문에 아무 대답이 없다하고 코드가 기록 된대로 n에 잘 정의 된 값 때 루프가 실행을위한 기회가 없습니다.

+0

그게 사실이긴하지만 나는 그가 코드에 관해서 생각하고 있다고 생각하지 않는다. 내 의견으로는 관련있는 질문은 ... 왜 floor (log n/log 2) + 1은 주어진 단계에 필요한 단계의 수 'n'? – Jekyll

1

n는 초기화되지 않습니다, 그래서 당신은 while (j<=n)에서 초기화되지 않은 변수를 사용하고 같은 기술적 동작은 정의입니다.

당신은 표준에 정의되어

n = INT_MAX

정수 오버 플로우가 발생합니다 파일 <limits.h>

그러나을 포함 사용 가능한 최대 정수 값으로 n을 설정하려면 j<=n 수표 이후에 j=j*2이 발생합니다. 이 방법의 한 가지 방법은 n = INT_MAX/2을 정의하는 것입니다. 더 나은 여전히 ​​while보다는 do/while 루프를 사용하고 마지막에 확인을 수행합니다.

+2

그는 '채워질'값 'n'에 따라 루프가 얼마나 자주 실행되는지 손에서 계산하기를 원한다고 생각합니다.이 경우 그의 코드는 작은 조각 일 뿐이며'n'의 값은 중요합니다. –

+1

@DaanTimmer 네, 당신은이 상황에서 저보다 스펙 *을 추측하는 게임에서 이기기가 더 쉽다고 생각합니다. – Bathsheba

-1

예 코드가 끝나고 n이 초기화되지 않습니다. 먼저 당신이 i<=log{2}n이 (단지 기능을 반전)을 의미 pow(2,i)<=n에가는 알고 그 다음,

0

당신이 적절한 값으로 변수 n를 초기화한다고 가정 calculte 초기화합니다. log{base 2}n = log n/log2은 잘 알려진 대수 특성을 나타냅니다. 이제 계산이 정확 i은 진짜 그러나이 경우 i 올바른 지수는 루프가 필요합니다 [floor(logn/log2);floor(logn/log2)+1]의 근사치에있을 것입니다, 그래서 당신은 정확히 그 번호를받지 않습니다 정수 때 pow(2,i)<=n<pow(2,i+1)

에 대한 간단한 예제를하자 :

n=11; ln(n)/ln(2)=2.39/0.69=3.46 
floor(3.46) = 3 
floor(3.46)+1 = 4 
i=1 i<=n: true: i*=2 
i=2 i<=n: true: i*=2 
i=4 i<=n: true: i*=2 
i=8 i<=n: true: i*=2 
i=16 i<=n: false=> don't loop 

정확히 어떤 four

+0

네 번은 루프가 실행 된 횟수이고, 비교는 다섯 번 수행되었습니다. 맞습니까? –

+0

예 ... 그렇게 보입니다. – Jekyll

관련 문제