C

[C] C언어 문제풀이 (중간수)

땅콩새싹 2020. 9. 26. 18:02
반응형

 


 

문제

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'를 출력 합니다.

 

실행결과

중간수가 아닐 때

 

중간수일 때

반응형