整数划分问题
来源:互联网 发布:windows 7 系统 编辑:程序博客网 时间:2024/05/21 13:41
现在偶尔写一段代码,用于解决一个简单的题目。因为程序太短,没有必要保存到自己的计算机中,就想放到博客上,与大家一起分享。今日的程序是整数划分问题:
采用递归求解方式,同时为了提高速率,记录了其中的g。若要进一步提高速度,还可以记录f(t, k)。
题目:一个正整数n可以划分为多少种和的方式?
例如5 可以划分为7种。
5 = 1 + 1 + 1 + 1 + 1
1 + 1 + 1 + 2
1 + 1 + 3
1 + 4
1 + 2 + 2
2 + 3
5
(不考虑次序)
代码如下:
#include <stdio.h>/* input : 5 output : 7 because : 5 = 1 + 1 + 1 + 1 + 1 1 + 1 + 1 + 2 1 + 1 + 3 1 + 4 1 + 2 + 2 2 + 3 5 7 splits kinds; */int store_results[1024];int f(int t, int k) {int m;int result;/*result = g(t - k);*/ result = store_results[t - k];if (0 >= t || t < k)return 0;for (m = 1; m <= k - 1; ++m) {result -= f(t - k, m);}return result;}int g(int t) {int k;int result = 0;if (0 == t)return 1;for (k = 1; k <= t; ++k) {result += f (t, k);}store_results[t] = result;return result;}int main() {int number;store_results[0] = 1;for (number = 1; number < 100 * 3; ++number) {fprintf(stdout, "all splits of %d : %d\n", number, g(number));}return 0;}
采用递归求解方式,同时为了提高速率,记录了其中的g。若要进一步提高速度,还可以记录f(t, k)。
- 整数划分问题
- 整数划分的问题
- 整数划分问题
- [算法]整数划分问题
- 整数划分问题
- 【转】整数划分问题
- 整数划分问题解析
- 整数划分问题
- 整数划分问题
- 整数划分问题
- 整数划分问题
- 整数划分问题
- 整数划分问题 POJ1664
- 整数划分问题
- 整数划分问题
- 整数划分问题
- 整数划分问题
- 整数划分问题
- Android学习笔记---开发与运行(卸载)第一个ANDROID应用--Helloworld
- Mysql数据库命令
- 《Java核心技术(第八版)》笔记之第11章异常、断言和调试
- android sdk 如何重新生成debug.keystore
- c语言二维数组的下标运算与指针偏移
- 整数划分问题
- Android学习笔记05---项目的目录结构与安装及启动过程分析
- 【Android病毒分析报告】--FakeInstaller
- C#自制串口调试助手——Tiny串口助手(含安装程序+工程文件)
- 求多点的中心点坐标
- Android学习笔记06---电话拨号器的制作:项目结构深化
- js总结
- Access转SqlServer的注意事项
- 实现复选框及图片切换