[boj](b 1)1193検索スコア


インプリメンテーション

質問する


リンク



に答える


無限大の配列であるため,単純に2次元配列に点数を置いてX番目の点数を探すことはできない.したがって,X値で点数を求める関数を実現しなければならない.

  • 交差点に移動するため、Xはいくつかの対角線に含まれる計算方法が異なります.->Xを求めて第数本の対角線(i)の中で含みます.

  • 求めた対角線(i)が単数であるか偶数であるかによって,異なる計算方式で点数を求める.
  • コード#コード#

    #include <iostream>
    #include <algorithm>
    #include <string>
    
    using namespace std;
    
    int main()
    {
        ios_base::sync_with_stdio(false);
        cin.tie(NULL);
        cout.tie(NULL);
    
        int X, i, num = 0, a, b; // a: 분자, b: 분모
        cin >> X;
    
        for (i = 1;; i++)
        {
            num += i;
            if (X <= num)
                break;
        }
    
        if (i % 2 == 0)
        {
            a = 1;
            b = i;
            for (int j = 0; j < X - (num - (i - 1)); j++)
            {
                a++;
                b--;
            }
        }
        else
        {
            a = i;
            b = 1;
            for (int j = 0; j < X - (num - (i - 1)); j++)
            {
                a--;
                b++;
            }
        }
    
        cout << a << "/" << b << "\n";
    
        return 0;
    }