帮我看看代码
查看原帖
帮我看看代码
1283785
boringGhast楼主2024/9/16 13:52
#include <iostream>
#include <cmath>
using namespace std;

int n,S,k,a,b;

int main()
{   
    cin >> n ;
    k = floor((1+sqrt(1+8*n))/2);
   // k = floor((-1+sqrt(1+8*n))/2);
    S = k*(k+1)/2;
    a=k-(n-(S-k)-1), b=k+1-a;
    if (k&1) {
        cout << a << "/" << b;
    } else cout << b << "/" << a;

    return 0;
}

Sn = 1+2+3+...+n
我的思路是求 Sk-1 < n <= Sk
然后拆公式得 k(k-1)/2 < n <= k(k+1)/2
①k^2 + k - 2n >= 0; ②k^2 - k - 2n <0
但是求k的时候用①只过第1个测试点,用②只过2、3、4测试点。
有没有人帮我看看怎么改

2024/9/16 13:52
加载中...