C ++中最接近的除数
假设我们有一个整数num,我们必须找到其差等于num+1或num+2的绝对差值中最接近的两个整数。我们必须以任意顺序找到这两个整数。因此,如果输入为8,则输出将为[3,3],对于num+1,它将为9,最接近的因数是3和3,对于num+2=10,最接近的因数是2和5,因此选择了3和3。
为了解决这个问题,我们将遵循以下步骤-
定义一个名为getDiv()的方法,该方法将x作为输入
diff:=infinity,创建一个大小为2的ret数组
对于i:=1,如果i^2<=x,则将i加1
一个:=我
b:=x/i
newDiff:=|a–b|
如果newDiff<diff,则
差异:=newDiff
ret[0]:=a和ret[1]:=b
如果x可被i整除,则
返回ret
从主要方法中找到op1:=getDiv(num+1)和op2:=getDiv(num+2)
当|op1[0]–op[1]|时返回op1<=|op2[0]–op2[1]|,否则为op2
范例(C++)
让我们看下面的实现以更好地理解-
#include <bits/stdc++.h> using namespace std; void print_vector(vector<auto> v){ cout << "["; for(int i = 0; i<v.size(); i++){ cout << v[i] << ", "; } cout << "]"<<endl; } class Solution { public: vector <int> getDiv(int x){ int diff = INT_MAX; vector <int> ret(2); for(int i = 1; i * i <= x; i++){ if(x % i == 0){ int a = i; int b = x / i; int newDiff = abs(a - b); if(newDiff < diff){ diff = newDiff; ret[0] = a; ret[1] = b; } } } return ret; } vector<int> closestDivisors(int num) { vector <int> op1 = getDiv(num + 1); vector <int> op2 = getDiv(num + 2); return abs(op1[0] - op1[1]) <= abs(op2[0] - op2[1]) ? op1 : op2; } }; main(){ Solution ob; print_vector(ob.closestDivisors(8)); }
输入项
8
输出结果
[3,3]