口试标题:(3)整数拆分

[复制链接]
发表于 2026-2-5 07:59:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
标题

给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化。
返回 你可以得到的最大乘积 

  • 示例 1:

    • 输入: n = 2
    • 输出: 1
    • 表明: 2 = 1 + 1, 1 × 1 = 1

  • 示例 2:

    • 输入: n = 10
    • 输出: 36
    • 表明: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。

  • 提示:2 <= n <= 58
代码
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. int main()
  5. {
  6.     while (1)
  7.     {
  8.         int n;
  9.         scanf("%d",&n);
  10.         if (n<2 || n>58)
  11.             return 0;
  12.         int three_n = n/3;
  13.         int yushu = n%3;
  14.         int end = 1;
  15.         if (yushu == 1)
  16.         {
  17.             three_n--;
  18.             for (int i = 0; i < three_n; i++)
  19.             {
  20.                 end = end * 3;
  21.             }
  22.             end = end * 4;
  23.         }
  24.         else if (yushu == 2)
  25.         {
  26.             for (int i = 0; i < three_n; i++)
  27.             {
  28.                 end = end * 3;
  29.             }
  30.             end = end * 2;
  31.         }
  32.         printf("end = %d\n",end);
  33.     }
  34.     return 0;
  35. }
复制代码
剖析


  • 什么数相乘最大

    • 将一个数拆分为多个3,由于3的乘积最大
    • 当余数为1的时间,将一个3拆出来合成为4(1+3),乘积最大
    • 当余数为2的时间,直接多个3相乘再乘于2的乘积最大

举例


  • 9

    • 3*3*3

  • 10

    • 3*3*4

  • 11

    • 3*3*3*2



 
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表