• HDU 6298(数学)


    题意是给出一个数,找出这个数的三个因子且这三个因子的和等于这个数,输出满足条件的乘积最大的一组因子的乘积,如果不存在这样的因子,就输出 -1.

    第一次 wa 了,因为把题目中的 x | n 当做了位或操作(其实这样那句话读不通...),其实是整除的意思。

    分析:因为 n = n * 1

    = n * (1/2 + 1/3 + 1/6) = n * (1/3 + 1/3 + 1/3) = n * (1/2 + 1/4 + 1/4)

    所以若一个数可以被 2、3 整除

    或可以被 3 整除

    或可以被 4 整除

    则所要求的一组因子是存在的。

    而 2 和 3 这种情况包含在第二种情况中,那么只要这个数可以被 3 或 4 整除,所要求的一组因子就是存在的。

    又因为第二种情况下三个因子的乘积为 1/27 * (n^3),第三种情况下三个因子的乘积为 1/32 * (n^3),第二种情况的结果大于第三种情况,则要优先考虑第二种情况。

    代码如下:

              

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 long long n,ans;
     4 int main()
     5 {
     6     int t;
     7     scanf("%d",&t);
     8     while(t--)
     9     {
    10         scanf("%lld",&n);
    11         ans = -1;
    12         if(n%3==0)
    13         {
    14             n = n/3;
    15             ans = n*n*n;
    16         }
    17         else if(n%4==0)
    18         {
    19             ans = n/4*n/4*n/2;
    20         }
    21         printf("%lld
    ",ans);
    22     }
    23     return 0;
    24 }
    View Code

    感谢这篇博客的作者:https://www.cnblogs.com/ZERO-/p/9364600.html

  • 相关阅读:
    旧键盘 (20)
    人口普查(20)
    打印沙漏(20)
    程序运行时间(15)
    反转链表 (25)
    科学计数法 (20)
    组个最小数 (20)
    python yield使用
    python如何优雅判断类型
    python中如何优雅使用import
  • 原文地址:https://www.cnblogs.com/Taskr212/p/10419458.html
Copyright © 2020-2023  润新知