티스토리 뷰

Algorithm

4673_셀프 넘버

Dev gOm 2016. 10. 5. 17:31

Explain

    • 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75 + 7 + 5 = 87이다.
    • 이때 n을 d(n)의 생성자라고 하며 생성자가 없는 숫자를 셀프 넘버 라고 한다.
    • 10000보다 작거나 같은 셀프넘버를 한 줄에 하나씩 출력하는 프로그램을 작성하시오.

Solution

    • 간단하게 1~10000까지의 수를 순회하며 d(n)을 실행 후 생성되는 n을 array를 활용하여 저장. 이때 array의 크기는 10001로 지정하며 array에 0이 저장되어 있는경우 생성자가 없는 수 이므로 셀프넘버이므로 해당 숫자만 출력.

Code

#define LIMIT 10000

int d(int n);

int main(void)
{
	int n = 1,i;
	char ss[LIMIT+1] = {0};

	while(1)
	{
		int t = d(n);

		if(n>=LIMIT)
			break;
		
		if(t<=LIMIT)
			ss[t] = 1;
		n++;
	}

	for(i = 1 ; i < LIMIT;++i)
	{
		if(ss[i] == 0)
			printf("%d\n",i);
	}
}

int d(int n)
{
	int result = n;

	if(n>=10000) result += n/10000;
	if(n>=1000) result += (n%10000)/1000;
	if(n>=100) result += (n%1000)/100;
	if(n>=10) result += (n%100)/10;
	result += n%10;

	return result;
}

'Algorithm' 카테고리의 다른 글

Matrix chain multiplication  (0) 2016.10.12
Floyd's Algorithm  (0) 2016.10.12
1065_한수  (0) 2016.10.05
Matrix multiplication 행렬의 곱셈  (0) 2016.09.19
Matrix 행렬  (0) 2016.09.19
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함