수학 기호 채우기 알고리듬 문제

cleansugar의 이미지

http://gall.dcinside.com/list.php?id=programming&no=373593&page=1&bbs=

?에는 + 또는 - 이 2가지의 기호만 사용할 수 있다.

? 1 ? 2 ? 3 ? 4 ? 5 ? 6 ?....? N = K

K를 입력 받았을 때, 최소값 N를 찾는 문제

예를 들어

K=2 이면 N=3

+1-2+3 = 2

K=11 이면 N=5

+1-2+3+4+5 = 11

eseo의 이미지

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
void usage();
 
int main(int argc, char *argv[])
{
    if (argc<2) {
        usage();
        exit(1);
    }
 
    int i;
    int sum ;
    int n; // N
    int k = atol(argv[1]); // K
    int fm;
    sum = 0;
    n = 0;
    fm = 0;
    while ( sum < k ) {
        sum=sum+n++;
    }
    if(sum == k) {
        printf("1");
        for(i=2;i<n;i++){
            printf(" + %d", i);
        }
        printf(" = %d\n", k);
    } else {
        while ( (sum-k)%2 ) {
            sum=sum+n++;
        }
        fm=sum-k;
        if(fm==2) printf("-1");
        else printf("1");
        for(i=2;i<n;i++){
            if(i==fm/2) printf(" - %d", i);
            else printf(" + %d", i);
        }
        printf(" = %d\n", k);
 
        printf("N = %d @ K=%d\n", n-1, k);
        printf("\n");
        exit(0);
 
}
 
 
void usage ()
{
    printf("사용법: %s _number_ \n", "a.out"); //*exename);
}

./a.out 2
1 - 2 + 3 = 2
N = 3 @ K=2

./a.out 11

1 - 2 + 3 + 4 + 5 = 11
N = 5 @ K=11

./a.out 5

1 + 2 + 3 + 4 - 5 = 5
N = 5 @ K=5

---
배려하는 마음을 갖자.