hdu 6298 Maximum Multiple(规律)
Posted zhgyki
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu 6298 Maximum Multiple(规律)相关的知识,希望对你有一定的参考价值。
hdu6298 Maximum Multiple
题意:
给你一个整数n,从中找出可以被n整除的三个数x,y,z;
要求x+y+z=n,且x*y*z最大。
思路:
开始一看T到1e6,n也到1e6,就想到打表,可是打表就只输出最大值
没有把取的那三个数也数出来,纠结了许久。
正解就是设a=n/x,b=n/y,c=n/z;
则1/a+1/b+1/c=1;
则abc可取3,3,3;2,3,6;2,4,4
代码:
#include<bits/stdc++.h> using namespace std; #define N 100 typedef long long ll; /*int main() { int m; while(cin>>m) { for(int n=1;n<=m;n++){ long long ans=-1; int a=0,b=0,c=0; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { for(int k=1;k<=n;k++) { if(n%i==0&&n%j==0&&n%k==0&&i+j+k==n) { long long tmp=i*j*k; if(ans<tmp) { ans=tmp; a=i; b=j; c=k; } } } } } if(ans!=-1){ cout<<n<<" "<<ans<<" "; cout<<a<<" "<<b<<" "<<c<<endl; } } } return 0; }*/ int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int T; ll n; cin>>T; while(T--){ cin>>n; ll ans=-1; ll x,y,z; if(n%2==0) { x=n/2,y=n/3,z=n/6; if(x+y+z==n&&x*y*z>ans) ans=x*y*z; x=n/2,y=n/4,z=n/4; if(x+y+z==n&&x*y*z>ans) ans=x*y*z; } if(n%3==0){ x=n/3,y=n/3,z=n/3; if(x+y+z==n&&x*y*z>ans) ans=x*y*z; } cout<<ans<<endl; } }
以上是关于hdu 6298 Maximum Multiple(规律)的主要内容,如果未能解决你的问题,请参考以下文章
HDU6298 Maximum Multiple (多校第一场1001)
HDU6298-2018ACM暑假多校联合训练1001-Maximum Multiple
HDU6298-2018ACM暑假多校联合训练1001-Maximum Multiple
杭电2018多校第一场(2018 Multi-University Training Contest 1) 1001.Maximum Multiple (HDU6298)-数学思维题(脑子是个好东西,