문제 : 정수 N을 입력받아 소인수분해하여 그결과를 출력하는 프로그램
c가 배열 인덱스인데 -1 부터 시작해서 do-while문으로 증가시킨후 값을 대입합니다.
그러면 만족하는 결과가 2개일때 c는 1이고 배열엔 c[0], c[1] 두개의값에 대입이 되어있을겁니다.
밑에 결과 출력하는 for문에서 y=0; y <= ( ) ; y++ 인데
답지에는 c-1 로 되어있습니다.
위 예시일때 while문 빠져나오면 c는 1이고 답지대로 대입하면 y=0; y<= 0; y++
즉 한번밖에 돌지않습니다 출력은 c[0]만 출력,
그래서 답이 c가 되어야하는게 아닌가 싶습니다.
답지 page : 589쪽
요약하자면 답이 c-1이 맞는지, 맞다면 왜 c-1인지 궁금합니다.
안녕하세요 길벗수험서 운영팀입니다.
문제의 <프로그램 실행 예시>와
코드의 출력부분을 살펴보세요.
실행 예시에 따르면, 소인수 분해한 결과가 2,2,3,11 의 4가지가 나온경우
'x'표시는 3번이 출력되어야 합니다.
소인수 분해의 결과로 4개가 나왔다면 c는 0, 1, 2, 3으로 값이 변경되며 마지막에 3의 값을 갖게 되겠죠.
때문에 c가 0일 때, '2x' 출력
1일 때, '2x' 출력
2일 때, '3x' 출력
여기까지만 반복문으로 돌려 출력해준 뒤 마지막 11의 값을 'x' 없이 따로 출력하여
printf("%d", s[c]);
'11'을 출력하게 만듦으로써 문제의 <프로그램 실행 예시> 와 동일한 출력이 나오게 하는 것입니다.
행복한 하루되세요 :)
-
관리자2019-10-04 10:49:24
안녕하세요 길벗수험서 운영팀입니다.
문제의 <프로그램 실행 예시>와
코드의 출력부분을 살펴보세요.
실행 예시에 따르면, 소인수 분해한 결과가 2,2,3,11 의 4가지가 나온경우
'x'표시는 3번이 출력되어야 합니다.
소인수 분해의 결과로 4개가 나왔다면 c는 0, 1, 2, 3으로 값이 변경되며 마지막에 3의 값을 갖게 되겠죠.
때문에 c가 0일 때, '2x' 출력
1일 때, '2x' 출력
2일 때, '3x' 출력
여기까지만 반복문으로 돌려 출력해준 뒤 마지막 11의 값을 'x' 없이 따로 출력하여
printf("%d", s[c]);
'11'을 출력하게 만듦으로써 문제의 <프로그램 실행 예시> 와 동일한 출력이 나오게 하는 것입니다.
행복한 하루되세요 :)