반응형
문제
1 부터 n-1 까지의 합이 n+1, n+2,... 의 합과 같을 때 n을 중간수라 한다.
예를 들어, 4는 1+2+3=6 이고 5부터 차례대로 더해갈 때 5+6=11 이므로 중간수가 될 수 없다.
6은 1+2+3+4+5=15 이고 7+8=15 이므로 6은 중간수이다.
정수 하나를 입력으로 받아 중간수 인지를 판별하는 프로그램을 작성하시오.
입력
10,000 이하의 자연수가 입력으로 주어진다.
출력
중간수이면 O, 아니면 X를 출력한다.
보충설명
35는 중간수
- 1+2+...+34=595
- 36+37+...+49=595
코드설명
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
|
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
int num, front = 0, back = 0;
while (1) {
printf("10,000 이하의 정수를 입력하세요 : ");
scanf("%d", &num);
if (num > 10000 || num < 0) {
printf("다시 입력해 주세요!\n");
}
else
break;
}
for (int i = 0; i < num; ++i) {
front += i;
}
for (int j = num + 1; ; ++j) {
back += j;
if (back >= front) {
break;
}
}
if (front == back) {
printf("O");
}
else
printf("X");
return 0;
}
|
변수로 10,000이하의 자연수를 입력받을 'num' 중간수 앞쪽 값을 더할 'front', 뒷쪽 값을 더할 'back'을 선언했습니다.
그리고 10,000 이상의 수나 음수를 입력했을 때 '다시 입력해 주세요!'라는 문구가 나오고 while문이 계속 돌아가게 됩니다. 그리고 정확한 수를 입력했을 때 break로 while문을 벗어나게 됩니다.
그리고 for문으로 가서 입력받은 수를 기준으로 1부터 입력받은 수-1 까지 더해서 front에 저장합니다.
그리고 다음 for문에서 입력받은 수+1 부터 1씩 증가된 값을 더해 front와 비교해서 같거나 커지게 되면 break됩니다.
그리고 front와 back값을 비교해 값이 같으면 'O'를 출력하고 값이 다르면 'X'를 출력 합니다.
실행결과
반응형