문제

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

풀이

  1. 1자리 수와 2자리 수는 어떻게 보면 다 등차수열이기 때문에 입력한 값 그대로 저장하면 됨(3자리 수 일 시 99개)
  2. 3자리 수 부터 등차수열을 처리하면 됨
    1. 입력한 값에서 3자리 수를 분리
    2. 3자리 수에서 100의 자리 수와 10의 자리 수를 뺀 값이 1의 자리 수 인지 판단
    3. 그거를 입력한 값부터 100까지 하나씩 빼면서 반복

image.png

코드

#include <stdio.h>

int main() {
    int num;
    scanf("%d", &num);
    int hundred, ten, one;
    int count = 0;
    if(!(num / 100)){
        printf("%d", num);
        return 0;
    }
    for(int i = num; i > 100; i--){
        if((i / 100) - ((i % 100) / 10) == ((i % 100) / 10) - ((i % 10) / 1)) count++;
    }
    printf("%d", count+99);
    return 0;
}