链接: link.
写这一道题的时候我知道是用公式,但是忽略了高中学的一个数学函数(对勾函数) 给定三个数n,x,y,要求 xy>=n 这时当x=y的时候即x=sqrt(n)时,有几个细节
① 若xxn 操作数ans=2x-2;
②若xx<n 为了使前面两个数之积大于n, 引入变量t,使t=n/x(或者是n/x+1),这里是当n%x0 ,t=n/x,否则t=n/x+1才能满足条件 操作数ans=x+t-2;
第三种情况x*x>n不予考虑,因为与第二种情况原理相同
代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int t,n,x,tep,ans;cin>>t;while(t--){
cin>>n;x=sqrt(n);if(x*x==n) ans=2*x-2;else{
if(n%x==0) tep=n/x;else tep=n/x+1;ans=x+tep-2;}cout<<ans<<endl;}
}