链接: 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;
}
}
本文探讨了使用对勾函数解决特定数学问题的方法,并通过三种情况详细解释了如何找到两个数,使其乘积大于等于给定数值n。文章提供了一段C++代码实现,展示了不同情况下求解的操作数数量。
196

被折叠的 条评论
为什么被折叠?



