지나가다 다시 수정해서 실행시켜 보았습니다만 안지훈님 말씀대로의 결과는 안나오는 걸요... 총카운트는 64가 아니라 45(46-1)회입니다..(여기서 카운트는 진짜 루프가 진행된 회수만 세어볼 때 입니다. 카운트는 1부터 세어야 겠지요.)
확인을 위해 이렇게 고쳐보았습니다.
int i , j , tcnt=1;
for( i=1; i<=10 ; i++)
{
printf("I loop : %3d\n", i);
int cnt=1;
for( j=i ; j<=10 ; j++)
{
printf(" J loop : i:%3d j:%3d i+j:%3d cnt:%3d Total:%3d\n", i, j, i+j, cnt, tcnt);
tcnt++; cnt++;
if( i+j == 12) break;
}
}
printf("Total Count => %3d\n", tcnt);
문제는 break문에 해당되는 경우가 초반과 중반, 후반이 다르다는 거지요.. 왜냐구요.. i+j가 12가 나올 때만 j의 for문을 중단하고 나오니까요..결과파일도 덤으로 올려놓습니다..ㅎㅎ
루프별로 시작과 끝만 남기고 보면 아래와 같습니다.
카운트가 순서대로 10->9->7->5->3->1->4->3->2->1 번이죠..
제일 마지막의 TotalCount 는 46이지만 한번을 빼야합니다. 마지막 루프에서 나가면서 1이 증가 되니까요..
이건 카운트하면 안되겠죠..
I loop : 1
J loop : i: 1 j: 1 i+j: 2 cnt: 1 Total: 1
J loop : i: 1 j: 10 i+j: 11 cnt: 10 Total: 10
I loop : 2
J loop : i: 2 j: 2 i+j: 4 cnt: 1 Total: 11
J loop : i: 2 j: 10 i+j: 12 cnt: 9 Total: 19
I loop : 3
J loop : i: 3 j: 3 i+j: 6 cnt: 1 Total: 20
J loop : i: 3 j: 9 i+j: 12 cnt: 7 Total: 26
I loop : 4
J loop : i: 4 j: 4 i+j: 8 cnt: 1 Total: 27
J loop : i: 4 j: 8 i+j: 12 cnt: 5 Total: 31
I loop : 5
J loop : i: 5 j: 5 i+j: 10 cnt: 1 Total: 32
J loop : i: 5 j: 7 i+j: 12 cnt: 3 Total: 34
I loop : 6
J loop : i: 6 j: 6 i+j: 12 cnt: 1 Total: 35
I loop : 7
J loop : i: 7 j: 7 i+j: 14 cnt: 1 Total: 36
J loop : i: 7 j: 10 i+j: 17 cnt: 4 Total: 39
I loop : 8
J loop : i: 8 j: 8 i+j: 16 cnt: 1 Total: 40
J loop : i: 8 j: 10 i+j: 18 cnt: 3 Total: 42
I loop : 9
J loop : i: 9 j: 9 i+j: 18 cnt: 1 Total: 43
J loop : i: 9 j: 10 i+j: 19 cnt: 2 Total: 44
I loop : 10
J loop : i: 10 j: 10 i+j: 20 cnt: 1 Total: 45
Total Count => 46
안지훈 님이 쓰신 글 :
: 독학으로 공부하면서 나름대로 이해하려고 용쓰는데 어려움은 좀있네요...지금 반복문쪽(break문으로 반복문빠져나가기...)을 공부중인데....중간에 이해가 안돼는부분이있네요....책중간에 예제코드 같은걸로
:
: int i , j , cnt=0 ;
:
: for( i=1; i<=10 ; i++){
:
: for( j=i ; j<=10 ; j++){
: cnt++;
: if( i+j ==12) break;
: }
: }
:
: printf("count => %d\n", cnt);
:
: 이겨서 퀴즈로 이중for문에서 출력되는 cnt의 값을 계산해보라는문제인데요....중복된 for문에서 break는 가까운 for문을 빠져나간다고 되있는데....그럼 두번째 for문을 빠져나가서 다시 처음의 for문을 반복하면 다시 두번째 for문을 다시사용하나요??아님 한번빠져나간 for문은 그담부턴 사용안하는건가요??그게 궁금하고요....
: 답은 64로 되있는데 어째서 그렇게 되는지 이해가 안돼네요...연습문제도 아니라 설명도 안나와있어요...ㅠ.ㅠ 잘아시는분 조언좀 구할게요...절대 학교 과제 그런거 아닙니다....;;;;;꼭 부탁드립니다...
|