SDUT-1293乘积最大的分解

乘积最大的分解

Time Limit: 1000MS Memory limit: 65536K

题目描述

一个正整数N(0<n<100),可以写成若干个正整数加数之和,如6可以写成
 
6=1+2+3;
6=2+2+2;
6=2+4;
6=3+3;
6=1+5;
……

其中有一种分解方式获得的加数的乘积是所有分解方式中最大的,比如上面分解中最大的乘积是3×3=9。

请你设计一种算法,对于任何一个输入的正整数,求出其各种分解中所得到的最大乘积。

输入

输入有多组,每组一行输入一个正整数。以0作为输入的结束。

输出

对应输入的数据,输出多行,输出所求最大分解乘积。

示例输入

6
7
0

示例输出

9
12
思路:根据规律,一个正整数n拆分成多个3或多个2的和时,它们的乘积最大
代码:
View Code
#include <stdio.h>
#include <math.h>
#include <stdlib.h>

int main()
{
    int n = 0;
    double num = 0;
    double ans = 0;
    while ( scanf ("%d", &n) != EOF && n )
    {
        if ( n == 1 )
        {
            printf ("1\n");
            continue;
        }
        if ( n == 2 )
        {
            printf ( "2\n" );
            continue;
        }
        if ( n % 3 == 0 )
        {
            num = n / 3;
            ans = pow (3.0, num );
        }
        else if ( n % 3  == 1 )
        {
            num = n / 3 - 1;
            ans = pow (3.0, num) * 4.0;
        }
        else
        {
            num = n / 3;
            ans = pow (3.0, num) * 2.0;
        }
        printf ("%.0lf\n", ans);
    }
    return 0;
}

 

转载于:https://www.cnblogs.com/libao/archive/2012/04/27/2473153.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值