오보에블로그
1065 한수 본문
728x90
/*문제
어떤 양의 정수 X의 자리수가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.
출력
첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.
예제 입력 복사
110
예제 출력 복사
99
*/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | #include <stdio.h> int main(void){ int N,count = 0;/*N은 입력받는 값, count는 한수의 개수*/ int thr =1, sec =0, fir=0;/*100 에서 부터 N까지 차례로 확인하기 위해 셋째 자리수, 둘째자리수, 첫째자리수에 각각 1,0,0 넣음*/ scanf("%d",&N); if(0<N && N<100){ count = N; printf("%d",N); }/*N이 100보다 작으면 N이 모두 한수이므로 그대로 N출력*/ else{ int fir_N = N%10;/*N의 첫째 자리수*/ int sec_N = ((N-fir_N)%100)/10;/*N의 둘째 자리수*/ int thr_N = N/100;/*N의 셋째 자리수*/ count +=99; for(;thr<= thr_N;thr++){/*1부터 N의 셋째 자리수 까지 for문 */ sec =0;/*둘째 자리수 초기화: 셋째자리수가 1증가하면 sec는 0부터 다시 세어야하므로*/ while(0 <= sec && sec <=9){ if(thr == thr_N && sec>sec_N)/*검사하는 숫자가 N을 넘으면 break*/ break; fir=0;/*첫째 자리수 초기화: 둘째자리수가 1증가하면 fir는 0부터 다시 세어야하므로*/ while(0<=fir && fir <=9){ if(thr == thr_N && sec == sec_N && fir > fir_N)/*검사하는 숫자가 N을 넘으면 break*/ break; if((fir+thr)==2*sec){/*등차수열 특징 : 둘째항의 두배는 셋째항과 첫째항의 합과 같다.*/ count++;/*결과값 1 증가*/ } fir++; } sec++; } } printf("%d",count); } return 0; } | cs |
The source of this problem is Baekjoon Online Judge(http://www.acmicpc.net/)
728x90
'C++ & C# > C++' 카테고리의 다른 글
2523 별찍기-13 (0) | 2018.01.30 |
---|---|
5622 다이얼 (0) | 2017.12.29 |
1085 직사각형에서 탈출 (0) | 2017.11.20 |
Bitwise Operators and Enumeration Types (0) | 2017.11.19 |
단어순서 뒤집기 (0) | 2017.10.29 |