NC256764. 游游的数值距离
描述
输入描述
一个正整数。
输出描述
输出两个正整数,分别表示。
如果有多解,输出任意一解即可通过。
示例1
输入:
2
输出:
1 1
说明:
示例2
输入:
25
输出:
3 5
说明:
pypy3 解法, 执行用时: 70ms, 内存消耗: 21236K, 提交时间: 2023-08-06 20:51:17
import math a=[1] for i in range(1,14): a.append(a[-1]*i) n=int(input()) r=[1,1] w=n for i in range(3,len(a)): y=max(n//(a[i]-1),1) if w > abs((a[i] - 1) * y - n) and y != 2: r = [i, y] w = abs((a[i] - 1) * y - n) y+=1 if w > abs((a[i] - 1) * y - n) and y != 2: r = [i, y] w = abs((a[i] - 1) * y - n) print(*r)
C++(clang++ 11.0.1) 解法, 执行用时: 4ms, 内存消耗: 664K, 提交时间: 2023-08-08 19:53:29
#include<bits/stdc++.h> using namespace std; int main() { int n; cin>>n; int s=n; int m=2,x=1,y=1; for(int i=3;i<=10;i++) { m*=i; int t=m-1; int k=n/t; if(abs(t*k-n)<s&&k!=2) { s=abs(t*k-n); x=i; y=k; } if((t*(k+1)-n)<s&&k+1!=2) { x=i; y=k+1; } } printf("%d %d",x,y); }
Python3 解法, 执行用时: 42ms, 内存消耗: 4608K, 提交时间: 2023-08-06 19:36:30
n=int(input()) d=[1,1,n] q=2 for x in range(3,50): q*=x y=n//(q-1) if y==0: y=1 p=abs(q*y-y-n) if p<d[-1] and y!=2: d=[x,y,p] y+=1 p=abs(q*y-y-n) if p<d[-1] and y!=2: d=[x,y,p] print(*d[:2])