URAL1222

题意:

把n拆分成几个数,把这些数乘起来最大。

思路:

3越多越好。

对4,5特判一下,4的时候是2*2大,5的时候还剩个2,那么就是n%3=1的话,我们先拿个4,n%3==2的话就是先拿个2,后面把有多少个3乘起来就好了;

#include <cstdio>
#include <iostream>
using namespace std;
#define maxn 3022
int n, step;
int ans[maxn];
int main()
{
	scanf("%d", &n);
	if(n==1)
	{
		printf("1
");
		return 0;
	}
	int num=1;
	if(n%3==0){
		ans[1]=1;
	}
	if(n%3==1){
		ans[1]=4;
		n-=4;
	}
	if(n%3==2){
		ans[1]=2;
		n-=2;
	}
	step=n/3;
	for(int i=1;i<=step;++i)
	{
		for(int j=1;j<=num;++j) 
            ans[j]*=3;
		for(int j=1;j<=num+1;++j)
		{
			ans[j+1]+=ans[j]/10;
			ans[j]%=10;
		}
		int k=num;
		while(ans[k+1]!=0)
			++k;
		num=k;
	}
	for(int i=num;i>=1;--i)
        printf("%d",ans[i]);
	printf("
");
	return 0;
}


原文地址:https://www.cnblogs.com/keyboarder-zsq/p/6216791.html