问题描述:
对一个自然数N ( 1 <= N <= 50 ) ,N可以分解成若干个数字(数字可以是1,2,3,….,9)之和,问题是如何分解能使这些数字的乘积最大。
解题思路:
只有把N分成尽可能多的3,它们的乘积才能最大(当只剩下4时不用再分,因为: 4 > 3*1)主要就是处理4以下和4以上的递推情况。
#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std;
int cnt;
int sum;
void f(int n)
{
if(n <=4)
{
cnt++;
sum *=n;
cout<<n<<endl;
cout<<cnt<<" "<<sum<<endl;
}
else
{
sum *=3;
cnt++;
cout<<"3 ";
f(n-3);
}
#include <cstdlib>
#include <cstring>
using namespace std;
int cnt;
int sum;
void f(int n)
{
if(n <=4)
{
cnt++;
sum *=n;
cout<<n<<endl;
cout<<cnt<<" "<<sum<<endl;
}
else
{
sum *=3;
cnt++;
cout<<"3 ";
f(n-3);
}
}
int main()
{
int n;
while(cin>>n&&n!=EOF)
{
sum = 1;
cnt =0;
f(n);
}
return 0;
}
int main()
{
int n;
while(cin>>n&&n!=EOF)
{
sum = 1;
cnt =0;
f(n);
}
return 0;
}