문제
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.
출력
첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.
처음 문제를 대충 읽었을 때는 어렵겠다고 생각. 하지만 입력되는 N의 조건이 간단함
1. 한자리수의 경우, 원소가 하나이므로 등차 수열이다.
2. 두자리 수의 경우, 원소가 두개 밖에 없으므로 등차 수열이다.
즉, N<100 인 경우, '한수'의 개수는 99개이다.
3. 세자리의 경우
백의 자리, 십의 자리, 일의 자리 의 차이가 일정할 경우 등차 수열이라 할 수 있다.
백의 자리는 i/100
십의 자리는 i/10%10
일의 자리는 i%10
으로 나타낼 수 있다.
입력된 정수 N 보다 작거나 같은 한 수의 개수를 세기 위해
100이상 N이하의 정수에 대하여 백-십 = 십-일 인지 확인해본다.
#include <stdio.h>
int ishan(int x){
int count=0;
//문제에서 입력은 1000보다 작거나 같음
//따라서 한자리수나 두자리수의 경우는 무조건 등차수열이다.
if(x<100) {
return x;
}else{
count = 99;
for(int i=100; i<=x; i++){
int hund = i/100;
int ten = (i/10)%10;
int one = i%10;
if((hund-ten)==(ten-one)){
count++;
}
}
return count;
}
}
int main()
{
//어떤 양의 정수 x 의 각 자리가 등차수열을 이룬다면..한수
int x;
scanf("%d",&x);
printf("%d",ishan(x));
return 0;
}