在C ++中最大化数字的四个因子的乘积
给定任务是计算在给定条件下可以从给定数N的四个因子A,B,C,D获得的最大乘积-
四个因子的总和应等于数字N,即N=A+B+C+D。
输入-N=10
输出-20
说明-10的因数是:1、2、5、10。
最大乘积可以通过乘以5*2*2*1=20来获得,并且也满足给定条件,即5+2+2+1=10。
输入-N=16
输出-256
说明-16的因数是:1、2、4、8、16。
通过乘以4*4*4*4=256可以获得最大乘积,并且它满足给定条件,即4+4+4+4=16。
在以下程序中使用的方法如下
创建一个int类型的数组Factors[]来存储给定数量的因数,并创建一个int类型的变量K=0来跟踪所占用的数组大小。
创建一个函数FindFactors()以查找给定数字的因数。
从i=1开始循环;i*i<=N;我++
在循环内部设置if(N%i==0)来检查I是否为因数。
如果i是一个因素,则检查是否(N/I==i)。如果是,则将i插入到Factors[]中,否则将N/i和i都输入到Factors[]中。
创建功能Product()以找出因素之外的最大乘积。
初始化intproduct=0;并且大小=K+1;
初始化四个新的嵌套循环,并将其运行到“大小”。
在循环内,初始化intsum=Factors[i]+Factors[]+Factors[k]+Factors[l];
检查(sum==N),如果是,则初始化pro=Factors[i]*Factors[j]*Factors[k]*Factors[l];
然后检查(pro>product),如果是,则输入product=pro;
返回
示例
#include <bits/stdc++.h>
using namespace std;
//数组存储因素
int Factors[30];
int K=0;
//函数查找因素
int FindFactors(int N){
//循环播放直到我到达sqrt(N)
for (int i = 1; i * i <= N; i++){
if (N % i == 0){
/* if both the factors are same then only one will be inserted*/
if ((N / i) == i){
Factors[K]=i;
K++;
}
else{
//在数组中插入第一个因子
Factors[K]=N/i;
K++;
//在数组中插入第二个因子
Factors[K]=i;
K++;
}
}
}
}
//查找最大乘积的功能
int Product(int N){
int product = 0;
int size = K+1;
for (int i = 0; i < size; i++)
for (int j = 0; j < size; j++)
for (int k = 0; k < size; k++)
for (int l = 0; l < size; l++){
//添加每组因子
int sum = Factors[i] + Factors[j] + Factors[k] + Factors[l];
//检查总和是否等于N-
if (sum == N){
//乘以因子
int pro = Factors[i] * Factors[j] * Factors[k] * Factors[l];
//如果发现较大的值,则替换产品的值
if(pro > product)
product = pro;
}
}
return product;
}
//主要功能
int main(){
int N = 10;
//调用函数查找N的因子
FindFactors(N);
//Calling查找最大乘积的功能
cout<<Product(N);
return 0;
}输出结果
如果运行上面的代码,我们将获得以下输出-
Maximum Profit: 20