넥슨 입사 문제라는데..
아란
####################################################################1번 설명
어떤 자연수 n이 있을 때, d(n)을 n의 각 자릿수 숫자들과 n 자신을 더한 숫자라고 정의하자.예를 들어 d(91) = 9 + 1 + 91 = 101이 때, n을 d(n)의 제네레이터(generator)라고 한다. 위의 예에서 91은 101의 제네레이터이다.어떤 숫자들은 하나 이상의 제네레이터를 가지고 있는데, 101의 제네레이터는 91 뿐 아니라 100도 있다.그런데 반대로, 제네레이터가 없는 숫자들도 있으며, 이런 숫자를 인도의 수학자 Kaprekar가
셀프 넘버(self-number)라 이름 붙였다.예를 들어 1,3,5,7,9,20,31 은 셀프 넘버 들이다.
1번 문제
1 이상이고 5000 보다 작은 모든 셀프 넘버들의 합을 구하라.
1번 답 : ________
####################################################################밑에 문제 풀이에는 C와 C++만 사용하라고 되어있군요..++ image 1 ++ _ 이미지가 안올라가네요... 텍큐 접속도 느리더니, 미국이라 그런가? :(/***********************************************************/#include stdio.hint main(){int num[5000];int i,temp,s1,s2,s3,s4;for(i=0;i5000;i++) num[i]=i;// num 이라는 배열을 5000칸 만들고 각각의 칸에 0~5000 까지의 숫자를 넣음.// 이 배열에서 셀프넘버가 아닌것들을 모두 제외하고 남은 숫자의 합이 셀프넘버의 합.for(i=0;i5000;i++){// 5000 보다 작은 셀프넘버만 구할것이므로 for문으로 5천까지 돌림. temp=i;// 자기 자신의 숫자와 s1=i/1000;// 천의자릿수 s2=(i-s1*1000)/100;// 백의 자릿수 s3=((i-s1*1000)-s2*100)/10;// 십의 자릿수 s4=(((i-s1*1000)-s2*100)-s3*10);// 일의 자릿수 temp+=s1+s2+s3+s4;//그 모두를 더함. if(temp5000) num[temp]=0;//만일 그 숫자가 5천 이하일경우, 다시말해 d(n)이 5천보다 작을경우 num[5000] 배열에서// 해당 숫자를 0으로 만듬.}// 5천까지 반복하여 셀프넘버가 아닌것들을 모두 0으로 만듬.temp=0;for(i=0;i5000;i++) temp+=num[i];// 남은 숫자를 모두 더하고printf(result: %d\n,temp);// 출력return 0;}/******************** coded by BlueH4G (http://blueh4g.org) *//***********************************************************/ 제가 여기서 궁금한 것은 셀프 넘버 구하는 방법을 어떻게 알고 소스를 작성하였느냐 입니다.그리고 어째서 이 소스가 셀프 넘버를 구하는 소스인지도 궁금합니다.
-
동이
제가 넥슨 입사하는 것이 아니라 넥슨 입사 문제를 그냥 질문 드리는것 뿐이에요;
말씀만은 감사히 받겠습니다 ^^ -
모드니
꼭 붙으셔서 넥슨 살리시길 바랍니다. 화이팅