#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测试点。
有没有人帮我看看怎么改