티스토리 뷰

Algorithm

1065_한수

Dev gOm 2016. 10. 5. 17:18

Explain.

    • 어떤 양의 정수 X의 자리수가 등차수열을 이룬다면, 그수를 한수라고 한다.
    • 등차수열은 연속된 두개의 수의 차이가 일정한 수열을 말한다.
    • N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.

Input

    • 자연수 N ( N<=1000 )

Output

    • 1보다 크거나 같고, N보다 작거나 같은 한수의 개수.

Solution

    • 3자리수 미만의 수는 모두 한수이다. (2자리 이하의 수는 당연히 수열이 2개,1개이므로 무조건 등차수열이 성립한다.) 그러므로 N < 100 일경우 한수의 개수는 N개이다.
    • N이 100이상 일 경우 각 자리수를 추출하여 모두 같거나(상수수열 이므로 등차수열) 각 자리수의 차이가 같은 경우 등차수열이므로 해당 100~N까지의 수를 순회하며 해당 조건을 만족하는 경우의 수를 합산하여 출력.

Code

int get_hansoo(int n);

int main(void)
{
	int input;
	scanf("%d",&input);
	printf("%d\n",get_hansoo(input));
}

int get_hansoo(int n)
{
	if(n < 100) return n;
	else {
		int i,hc = 99;
		for(i=100; i <= n ; ++i)
		{
			int a[3]; // 1 , 10 , 100

			if(i == 1000) break;

			a[0] = (i % 1000) / 100;
			a[1] = (i % 100) / 10;
			a[2] = i % 10;
			
			if((a[0] == a[1] && a[0] == a[2]) || a[0] - a[1] == a[1] - a[2]) hc++;
		}
		return hc;
	}
}

Reference.


'Algorithm' 카테고리의 다른 글

Floyd's Algorithm  (0) 2016.10.12
4673_셀프 넘버  (0) 2016.10.05
Matrix multiplication 행렬의 곱셈  (0) 2016.09.19
Matrix 행렬  (0) 2016.09.19
Recursive_Fibonacci Sequence  (0) 2016.09.07
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
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
글 보관함