数值分解 (sdut oj)
来源:互联网 发布:软件系统架构师 编辑:程序博客网 时间:2024/06/04 19:54
数值分解
Time Limit: 1000MS Memory Limit: 65536KB
Problem Description
对一个自然数N ( 1 <= N <= 50 ) ,N可以分解成若干个数字(数字可以是1,2,3,….,9)之和,问题是如何分解能使这些数字的乘积最大。
Input
输入数据有多组,每组占一行,每行包含一个自然数N(1 <= N <= 50)。输入文件直到EOF为止!
Output
对每组输入,输出有2行。第一行是N分解出的所有数字,以空格分隔,最后一个数字后也有空格;第二行是N分解出的所有数字的个数、乘积。
Example Input
202428
Example 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)
Author
zlh
参考代码
#include<stdio.h>int f(int n){ if( n == 4 || n == 3 || n == 2 || n == 1 ) { printf("%d ",n); return 1; } else { printf("3 "); return f(n-3)+1; }}int main(){ int n; int k,i,m; while(~scanf("%d",&n)) { k = 1; if( n % 3 == 0 ) { m = n / 3; for( i = 0; i < m; i++ ) k *= 3; } else if( n % 3 == 1 && n > 3 ) { m = ( n / 3 ) - 1; for( i = 0; i < m; i++ ) k *= 3; k *= 4; } else if( n % 3 == 2 ) { m = n / 3; for( i = 0; i < m; i++ ) k *= 3; k *= 2; } printf("\n%d %d\n",f(n),k); } return 0;}
0 0
- 数值分解 (sdut oj)
- SDUT 3478数值分解
- 数值分解
- 数值分解
- 数值分解
- 数值分解
- 数值分解
- 数值分解
- 数值分解
- 数值分解
- 数值分解
- 数值分解
- 数值分解
- 数值分解
- 杭电OJ(HDOJ)1013题:Digital Roots(数值分解)
- 数值分解ID 3478
- 数值分解(递归)
- M 数值分解
- 时间的加减计算
- ios ipv6 审核被拒通过办法,实测。
- 程序员如何自我学习与成长?
- js判断页面是否加载完成
- 关于docker部署,结合java项目一起研究
- 数值分解 (sdut oj)
- 莫比乌斯函数和莫比乌斯反演
- LBP特征计算程序
- 第二课:css选择器&选择器优先级及css3新增选择器(系统解析)
- java中方法的重载
- LeakCanary
- IOS UITextfield设置右对齐后 开头空格无法右对齐的解决方式
- 查询和删除表中重复数据sql语句
- 多线程,信号量的简单使用 GCD