M - 数值分解

    xiaoxiao2021-03-25  128

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

    Input

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

    Output

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

    Sample Input

    20 24 28

    Sample Output

    3 3 3 3 3 3 2 7 1458 3 3 3 3 3 3 3 3 8 6561 3 3 3 3 3 3 3 3 4 9 26244

    Hint

    由数学知识可知,只有把N分成尽可能多的3,它们的乘积才能最大(当只剩下4时不用再分,因为: 4 > 3*1) #include <iostream> using namespace std ; int main () {     int a ,b [ 1000 ],c ,i ,j ,l ;     while (cin >>a )     {         i = 0 ;         l = 1 ;         while (a > 0 )         {             if (a == 4 )             {                 b [i ]= 4 ;                 a = 0 ;                 l =l *b [i ];                 cout <<b [i ]<< ' ' ;                 i ++;             }             if (a > 4 ||a == 3 )             {                 a =a -3 ;                 b [i ]= 3 ;                 cout <<b [i ]<< ' ' ;                 l =l *b [i ];                 i ++;             }             if (a < 3 &&a > 0 )             {                 b [i ]=a ;                 l =l *b [i ];                 a = 0 ;                 cout <<b [i ]<< ' ' ;                 i ++;             }         }         cout <<endl ;         cout <<i << ' ' ;         cout <<l <<endl ;     } } 这个题由题意将这个数分成尽可能多的3,如果最后的数为4则不分解。
    转载请注明原文地址: https://ju.6miu.com/read-8644.html

    最新回复(0)