M

来源:互联网 发布:摄影入门书籍 知乎 编辑:程序博客网 时间:2024/06/11 00:39

Description

对一个自然数N ( 1 <= N <= 50 ) ,N可以分解成若干个数字(数字可以是1,2,3,….,9)之和,问题是如何分解能使这些数字的乘积最大。

Input

输入数据有多组,每组占一行,每行包含一个自然数N(1 <= N <= 50)。输入文件直到EOF为止!

Output

对每组输入,输出有2行。第一行是N分解出的所有数字,以空格分隔,最后一个数字后也有空格;第二行是N分解出的所有数字的个数、乘积。

Sample Input

202428

Sample Output

3 3 3 3 3 3 27 14583 3 3 3 3 3 3 38 6561 3 3 3 3 3 3 3 3 49 26244

Hint

由数学知识可知,只有把N分成尽可能多的3,它们的乘积才能最大(当只剩下4时不用再分,因为: 4 > 3*1)

题意:

把n分成多个数相加求出各个加数相乘最大的方法

分析:

递归,一个一个的分成3,然后求积

代码:

#include<bits/stdc++.h>using namespace std;long long int s,t;void Vp(int n){    int i;    if(n>4){        s++;        t*=3;        cout<<"3"<<" ";        Vp(n-3);    }    else    {       s++;       t*=n;       cout<<n<<" ";    }}int main(){    long long int n;    while(cin>>n)    {        s=0;        t=1;        Vp(n);        cout<<endl<<s<<" "<<t<<endl;    }}
感受:

其实就是按着提示来,没有难度。。大笑


0 0