c 백준 4637번 셀프넘버질문올립니다.
글쓴이: 익명 사용자 / 작성시간: 토, 2018/05/12 - 11:50오후
이놈의 함수가 속을 썩이네요. 코드 7번행부터 헷갈리기 시작합니다. 갑자기 b[n] 배열로 참거짓인지 판단을 어떻게 할 수 있는건가요? 단순히 이걸로 생성자가 없는 숫자인걸 알 수 있나요? 그 다음 while 문으로 작업을 해주는 이유는 무엇이죠?
#include<stdio.h> bool b[10002]; bool d(int n){ if(n>10000){ return false; } if(b[n]){ return false; } b[n] = true; int res = n; while(n){ res+=n%10; n/=10; } d(res); return true; } int main(){ for(int i = 1;i<=10000;i++){ if(d(i)){ printf("%d\n",i); } } }
Forums:
b 는 초기값이 할당되지 않은 전역 변수이므로 BSS
b 는 초기값이 할당되지 않은 전역 변수이므로 BSS 영역이라는 곳에 만들어집니다.
그곳은 프로세스가 만들어질때 전영역이 0으로 채워지는 곳이므로, 위와 같은 테스트가 가능합니다.
---
http://coolengineer.com
d 함수 마지막 부분에서
d(res) 로 해주는 이유가 무엇인가요?
배열에 저장해야 참거짓판단할수있는거아닌가여?
----
제가 저 문제가 뭔지모릅니다만. 뭔가 재귀호출로
제가 저 문제가 뭔지모릅니다만. 뭔가 재귀호출로 해결하는군요.
---
http://coolengineer.com
댓글 달기