xtu程序设计实践

任务描述

给定一个正整数n,找出k个数x1,x2...xn(n>=2)。使得x1+x2+..xn=n,并且使得x1*x2...*xn的值最大。返回这个最大值max


样例

给定 n = 2 打印 1 (2 = 1 + 1)

给定 n = 10 打印 36 (10 = 3 + 3 + 4)


测试说明

平台会对你编写的代码进行测试:

测试输入: 10

预期输出: 36


开始你的任务吧,祝你成功!

#include <iostream>
using namespace std;
int chenji(int n)
{
	int ji=1;
	int san=n/3;
	int si=n%3;
	if(si==0)
		{
		for(int i=0;i<san;i++)
		{
			ji=ji*3;
		}
		
		}
	if(si==1)
	{
	for(int i=0;i<san-1;i++)
	{
		ji=ji*3;
	}
		ji=ji*4;
		
	}
	
	if(si==2)
	{
		for(int i=0;i<san;i++)
			{
				ji=ji*3;
			}
				ji=ji*2;
	}
	return ji;	
}
int main()

{
	int k;
	scanf("%d",&k);
	if(k<7)
	{
	if(k<=4)
	{
		printf("%d\n",k);
		
	}
	if(k==5)printf("6\n");
return 0;
	
	}
	int ji=chenji(k);
	printf("%d\n",ji);
	
}

就是拆分一个整数,看了别人的发现还有用什么不等式,我感觉可以直接咬定数字3

我们可以举例子:

9<2*2*5<3*3*3

8<3*3*2

7<3*4

6<3*3

5<3*2

就是说5以上的数都要变成更多的3,才是最好的,这个时候我们就可以把输入的数变成很多个3,如果不能完全变成3,我们再想2或者4,经过计算11这个数,我们发现3*3*3*2比3*4*4要大,所以可以得出结论,当%3=2时,就直接用2,当%3=1时,就用4代替一个3,这样我们就得到了最小的,而且我觉得比不等式的暴力要快很多很多

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值