개발하는꼬물이 2018. 5. 3. 16:53

1. 문제 요약

   어떤 양의 정수 X의 자리수가 등차수열을 이룬다면, 그 수를 한수라 한다.

   등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 

   같은 한수의 개수를 출력하는 프로그램을 작성하시오. (0 < N <= 1000)


2. 예제 입력

110


3. 예제 출력

99


4. 코드 

#include <iostream>
using namespace std;

int CountNum(int n)
{
	
	int pos[3] = { 0 };  // 자릿수를 저장할 변수
	int count = 0; // 한수의 갯수

	if (n < 100)
		count = n; // 1자리수, 2자리수는 모두 비교 대상이 없어서 한수로 인정
	else
	{
		count = 99;

		for (int i = 100; i <= n; i++)
		{
			if (i == 1000)
				return count;

			pos[0] = i / 100;   // 100의 자리
			pos[1] = (i - pos[0] * 100) / 10;  // 10의 자리
			pos[2] = i % 10;  // 1의 자리

			if ((pos[0] - pos[1]) == (pos[1] - pos[2]))
			{
				count++;
			}
		}
	}

	return count;
}

int main()
{
	int num;
	int result = 0;
	cin >> num;

	if (num <= 0 || num > 1000)
		return -1;

	result = CountNum(num);

	cout << result << endl;

    return 0;
}