https://www.acmicpc.net/problem/1065
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.
첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.
3가지 경우로 나누어서 생각한다.
-> n만큼의 한수가 존재
if (n >= 1 && n <= 99) { cout << n; }
-> 144개의 한수 존재(예제 참조)
else if(n==1000){ cout << 144; }
-> 100부터 n까지의 숫자를 모두 검증해야 함
세자리수인 것을 알기 때문에, 3칸 크기의 배열을 만들어서 각 자리 수를 파싱해서 넣는다.
그리고 1,2번째 자리 숫자의 차이와 2,3번쨰 자리 숫자의 차이를 비교한다.
bool cal(int n) {
int arr[4] = { -1, };
int dif = 100000;
for (int i = 0; i < 4; i++) {
if (n == 0) break;
arr[i] = n % 10;
n = n / 10;
}
dif = arr[1] - arr[0];
if (dif != arr[2] - arr[1]) return false;
else return true;
}
int main()
{
cin.tie(0);
cout.tie(0);
cin.sync_with_stdio(0);
int n;
cin >> n;
if (n >= 1 && n <= 99) {
cout << n;
}
else if(n==1000){
cout << 144;
}
else {
int total = 99;
for (int i = 100; i <= n; i++) {
if (cal(i)) {
total++;
}
}
cout << total;
}
}