NYOJ 90 整数划分
来源:互联网 发布:mac os ie内核浏览器 编辑:程序博客网 时间:2024/05/27 18:17
题目连接
题目
描述
将正整数n表示成一系列正整数之和:n=n1+n2+…+nk,
其中n1≥n2≥…≥nk≥1,k≥1。
正整数n的这种表示称为正整数n的划分。求正整数n的不
同划分个数。
例如正整数6有如下11种不同的划分:
6;
5+1;
4+2,4+1+1;
3+3,3+2+1,3+1+1+1;
2+2+2,2+2+1+1,2+1+1+1+1;
1+1+1+1+1+1。
输入
第一行是测试数据的数目M(1<=M<=10)。以下每行均包含一个整数n(1<=n<=10)。。
样例输入:
1
6
输出
输出每组测试数据有多少种分法。
样例输出:
11
题解
首先利用好他给的(n1≥n2≥…≥nk≥1,k≥1。)这条件(提示)
因为从小到大的顺序进行的话是会有很复杂的麻烦的
而从大到小正好可以使用递归的方法(n范围1-10,时间足够)
后一个数一定<=前一个数
终止条件就是所有的数字之和=输入的数字
递归至首数字为1
代码(C++)
#include <iostream>using namespace std;int cnt; //全局计数int N;/**递归函数fun(n,m)n: 递归的首数字,eg从6,5,4...1m: 前面推断出的数字之和,是判断终止的条件 */void fun(int n,int m){ for(int i=n;i>=1;i--){ int add = m+i; if(add<N){ //若前面推断出的数字之和加上此次的i的和依旧小于N,继续递归 fun(i,m+i); }else if(add == N){ cnt++; //否则证明找出了一种表示方法,计数器加一。 } }}int main(){ int T; cin>>T; while(T--){ cin>>N; cnt = 0; //初始化计数器 fun(N,0); //初始递归参数N,0 cout << cnt << endl; } return 0;}
运行结果
阅读全文
0 0
- nyoj 90 整数划分
- 整数划分 NYOJ 90
- nyoj 90 整数划分
- 整数划分 nyoj 90
- nyoj 90 整数划分
- Nyoj 90 整数划分
- NYOJ 90整数划分
- nyoj-90-整数划分
- NYOJ 90 整数划分
- nyoj 90 整数划分
- NYOJ 90 整数划分
- NYOJ 90 整数划分
- NYOJ-90整数划分
- nyoj 90 整数划分 【深搜】
- nyoj 90 整数划分【DFS】
- nyoj 90 整数划分【dp划分数】
- nyoj-90 整数划分 (动态规划)
- nyoj 90 整数划分(一) (dp||递归)
- hibernate_多对多关联关系配置
- 安卓高德地图定位篇-(1)
- Mockito与Spring中@Autowired与@InjectMocks组合
- 有向图—朱刘算法模板
- 牛客网《剑指Offer》 矩形覆盖
- NYOJ 90 整数划分
- Regularization
- C++ Primer学习笔记(unit 2 变量和基本类型 -标识符
- 七个习惯
- 无用的探索
- angularjs知识点三过滤器
- 17年暑假计划
- java学习(4) 五子棋 小程序
- c++ Premier 学习笔记(unit2 变量和基本类型 -引用