HDU 6298 Maximum Multiple--多校补题 数学题

题意:给一个数字n,让你求xyz最大值,其中xyz满足 n=x+y+z, x∣n, y∣n, z∣n

条件:1 n=x+y+z, x∣n, y∣n, z∣n

            2 其中x,y,z,n都是整数

思路:n=x+y+z  -->>  n=n/a+n/b+n/c  -->>   1=1/a+1/b+1/c。其中1=1/3+1/3+1/3是最好想的,增大其中一个值,a=2,那么要写成整数其它两个值只能减小,1=1/2+1/4+1/4或是1=1/2+1/3+1/6。但是1=1/2+1/3+1/6得出的xyz肯定比不上1=1/3+1/3+1/3,所以1=1/2+1/3+1/6不考虑。只考虑3的倍数时为1=1/3+1/3+1/3,4的倍数时为1=1/2+1/4+1/4。

代码:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <map>
#include <list>
#include <algorithm>
#include <vector>
#include <string>
#include <cmath>
#include <cstring>
#include <queue>
#include <stack>
#include <set>
using namespace std;
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        long long int n;//n虽然没有超过int但是后面计算要算成longlong
        scanf("%lld",&n);
        if(n%3==0)
        {
            long long int ans=(n/3)*(n/3)*(n/3);
            printf("%lld\n",ans);
        }
        else if(n%4==0)
        {
            long long int ans=(n/2)*(n/4)*(n/4);
            printf("%lld\n",ans);
        }
        else
            printf("-1\n");
    }
    return 0;
}

总结:1 这题主要是一开始想偏了,后面越来越固执于刚开始的想法。

猜你喜欢

转载自blog.csdn.net/qq_40306845/article/details/81180903