题解 | #游游的数值距离#
游游的数值距离
https://www.nowcoder.com/practice/a3688c3615d144e4ba79357034850e3c
#include <iostream> #define int long long using namespace std; signed main() { int n, a, b; cin >> n; if(n <= 2)cout << "1 1"; else if(n == 4 || n == 3)cout << "3 1"; else{ int first = 2, minn = 999999999; for(int i = 3; i <= 13; i++){ first *= i; int now = first - 1; int bb = n / now; //cout << i << ' ' << bb <<" " << n - now * bb << " " << now * (bb + 1) - n << " "; if((n - now * bb) < minn && bb != 2 && bb != 0){ a = i; b = bb; minn = n - now * bb; } if((now * (bb + 1) - n) < minn && bb != 1 && bb != 0){ a = i; b = bb + 1; minn = now * (bb + 1) - n; } //cout << i << ' ' << minn << endl; } cout << a << ' ' << b; } } // 64 位输出请用 printf("%lld")
直接模拟做, 因为12!就比1e9大了,
对于每一个!考虑两种情况的b:第一个是不足n, 第二个是超过n,
注意第二种情况的b!=2判断不要写错了
(在这里想了很久的人)
#悬赏#言の随记题解 文章被收录于专栏
喵喵喵喵喵