c언어 질문 : 양의 정수 x를 입력 받아 1-2+3-4+5-6+...+n>x가 되는 최소의 n값 구하기
조회수 372회
//양의 정수 x를 입력 받아 1-2+3-4+5-6+...+n>x가 되는 최소의 n값 구하기
#include <stdio.h>
int main(){
int x,a,b=0;
scanf("%d",&x);
for(a=1;;a++){
if(a%2==0){
b=b-a;
}
else if(a%2==1){
b=b+a;
}
else if(b>x){
printf("%d",b);
break;
}
}
return 0;
}
시작한지 1주일 된 초보라... 답변 부탁드립니다.
1 답변
-
질문글에 의문문이 없고 물음표가 1개도 없어서 무엇을 "답변"드려야 할지 모르겠군요. 아마 질문(랄까 고민과 당혹감)은 "왜 이 코드는 안 끝나고 계속 실행되는 거에요?
break
가 안 걸리고 답이 출력이 안 돼요! 어떡하면 되나요?"겠지만… 뭐 시작한지 1주일 됐다 하시니 이해합니다.결론을 바로 말하자면, 순서를 바꾸시면 됩니다.
if(b>x)
를for
안의 첫번째 if로 세팅해 보세요.잘 생각해 보시면,
a % 2
는 항상1
이거나0
이거나 합니다. 예외는 없습니다. (왜 예외가 없는지는 중등수학 차원의 설명이 필요한 관계로 생략) 그래서 현재의 if-elseif-elseif 제어는 항상 첫번째 또는 두번째 분기로만 떨어지고 절대 셋째 분기로 떨어지지 않습니다. 그래서break
를 타지 않고 그래서 무한 루프를 도는 거에요. 순서를 바꾸면,b>x
는 참일 수도 거짓일 수도 있으므로, 만약 거짓일 경우 그제야 비로소a % 2
를 검사하는 단계로 넘어가겠지요.(제가 짐작한) 질문에 답이 되었는지요?
댓글 입력