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\n");
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("\n");
return 0;
}
浙公网安备 33010602011771号