본문 바로가기
PROGRAMMING CODE/C

[BAEKJOON] No.1193 C언어

by daye_ 2021. 10. 19.

분수찾기

#include <stdio.h>
/*분모, 분자의 합이 각 줄의 최댓값이기 때문에 분모나 분자 중 하나만 구해주면 된다.*/

int minus(int maxNum,int* num,int* n){
    for(int i=maxNum; i>=1; i--){    //maxNum부터 1까지
            *num=i;                  //n번째 현재 수 저장
            *n-=1;      
        if(*n==0) return 1; //n번째 수를 찾으면 break
    }
    return -1;
}

int plus(int maxNum,int* num,int *n){
    for(int i=1; i<=maxNum; i++){ //1부터 maxNum까지 증가
            *num=i;  
            *n-=1; 
        if(*n==0) return 1;
    }
    return -1;
}

int main(){

    int n,maxNum=1,num=0; //n번째 수, maxNum은 대각선 하나 기준일때 최대 수, num은 n번째 현재 수 
    scanf("%d",&n);
    while(1){
        if(minus(maxNum,&num,&n)==1) break; //내림,올림 하나 당 최댓값 늘어남. 내림한줄 올림한줄
        maxNum++; 
        if(plus(maxNum,&num,&n)==1) break; //n번째 수를 찾으면 break;
        maxNum++;
    }

    printf("%d/%d\n",num,maxNum+1-num); //maxNum+1해주는 이유는 해당 줄에서 분모,분자의 합이 최대값+1이기 때문
    return 0;                           
}

뭔가 간추릴수있을것같은데,,

 

 

 

#include <stdio.h>

int main(){
    int n,line=1;
    scanf("%d",&n);
    for(int i=1; n>line; i++){ //각 줄의 번호만큼 숫자가 있어서 그만큼 빼줌
            n = n - line;
            line++;
    }
    if(line%2==0) printf("%d/%d\n",n,line+1-n);
    else printf("%d/%d\n",line+1-n,n);
    return 0;
}

이래서 코딩은 손으로 쓰면서 하라는거군 ;ㅅ;

짤막해졌다,,

'PROGRAMMING CODE > C' 카테고리의 다른 글

[BAEKJOON] No. 10250 C언어  (0) 2021.10.19
[BAEKJOON] No.2869 C언어  (0) 2021.10.19
[BAEKJOON] No.1712 C언어  (0) 2021.10.19
[BAEKJOON] No.2941 C언어  (0) 2021.10.19
[BAEKJOON] No.5622 C언어  (0) 2021.10.18