https://www.acmicpc.net/problem/1065

 

1065번: 한수

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

www.acmicpc.net

문제

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

입력

첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.

출력

첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.


이번 문제는 이해를 이해하는 것부터 헤맸다. 어떤 분이 설명을 해줘서 이해했는데 그 글을 다시 찾으려니 못 찼겠넹;; 쩝...

아무튼, 설명하자면 어떤 수의 각 자릿수가 등차수열이면 그 수는 한수다. 예를 들어

한 자릿수의 경우 예제 입력에 1일 때 1이라고 출력하는 것으로 보아 한 자릿수는 무조건 등차수열로 치고 한수로 취급

두 자릿수의 경우 당연히 무조건 등차수열로 생각할 수 있으므로 한수다.

이제 문제는 세 자릿수 이상인데 각 자릿수가 등차수열인지 알아내면 된다. (123, 135, 963 등)

나 같은 경우는 일의 자리와 십의 자리 차를 저장해놨다가 각 자릿수의 차가 저장해둔 값과 모두 같으면 카운트하도록 만들었다.


#include <stdio.h>

int main(void)
{
	int a, i, b = 0, c, j, d;
	scanf("%d", &a);
	for (i = 1; i <= a; i++)
	{
		if (i < 100)
		{
			b++;
			continue;
		}
		c = i % 10 - i / 10 % 10;
		d = 1;
		for (j = i / 10; j / 10 != 0; j /= 10)
		{
			if (j % 10 - j / 10 % 10 != c)
			{
				d = 0;
				break;
			}
		}
		if (d)
		{
			b++;
		}
	}
	printf("%d\n", b);
	return 0;
}

+ Recent posts