BOJ 1193 분수찾기

1 개요[ | ]

BOJ 1193 분수찾기
  • 각 번호의 분수들이 어떤 규칙을 있는지 유추해 문제를 해결해 봅니다

2 C++[ | ]

#include <iostream>
using namespace std;

void getFrac(int x, int* frac) {
    int count = 0;
    int i, j;
    for(i=1; i<10000000; i++) {
        for(j=1; j<i+1; j++) {
            count++;
            if(count >= x) {
                if(i%2==0) {
                    frac[0] = j;
                    frac[1] = i-j+1;    
                } else {
                    frac[1] = j;
                    frac[0] = i-j+1;    
                }
                return;
            }
        }
    }
}

int main() {
    int X;
    cin >> X;
    int frac[2] = {0};
    getFrac(X, frac);
    cout << frac[0] << '/' << frac[1] << '\n';
}

3 Java[ | ]

import java.util.Scanner;
public class Main {
    private static String getFrac(int n) {
        int lv = 1;
        int lv_size = 1;
        int total = 1;
        int offset = 1;
        int a = 1;
        int b = 1;
        while( total < n ) {
            lv_size++;
            offset = n - total;
            if( lv%2 == 0 ) {
                a = lv_size - offset + 1;
                b = offset;
            }
            else {
                a = offset;
                b = lv_size - offset + 1;
            }
            total += lv_size;
            lv++;
        }
        return String.valueOf(a)+"/"+String.valueOf(b);
    }
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        System.out.println( getFrac(n) );
    }
}

4 Perl[ | ]

sub getFrac {
    my $n = shift;
    ($lv, $lv_size, $total, $offset, $a, $b) = (1) x 6;
    while ( $total < $n ) {
        $lv_size++;
        $offset = $n - $total;
        @m = ($lv_size - $offset + 1, $offset);
        ($a, $b) = ( $lv%2 eq 0 ? @m : reverse @m );
        $total += $lv_size;
        $lv++;
    }
    return $a . "/" . $b;
}
$n = <>;
printf("%s\n", getFrac($n));

5 PHP[ | ]

<?php
$n = intval(fgets(STDIN));
for( $t=1; $n>$t; $t++ ) $n -= $t;
$a = $n;
$b = $t - $n + 1;
if( $t%2 == 1 ) list($a, $b) = [$b, $a];
echo "$a/$b";

6 Python[ | ]

n = int(input());
t = 1
while n > t:
    n = n - t
    t = t + 1
a = n
b = t - n + 1
if t%2 == 1:
    a,b = b,a
print(str(a)+"/"+str(b))
문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}