蓝桥杯
来源:互联网 发布:linux sleep usleep 编辑:程序博客网 时间:2024/05/21 16:18
算法训练 数的划分
题目:
问题描述
将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序)。
例如:n=7,k=3,下面三种分法被认为是相同的。
1,1,5; 1,5,1; 5,1,1;
问有多少种不同的分法。
输入格式
n,k
输出格式
一个整数,即不同的分法
样例输入
7 3
样例输出
4 {四种分法为:1,1,5;1,2,4;1,3,3;2,2,3;}
数据规模和约定
6<n<=200,2<=k<=6
将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序)。
例如:n=7,k=3,下面三种分法被认为是相同的。
1,1,5; 1,5,1; 5,1,1;
问有多少种不同的分法。
输入格式
n,k
输出格式
一个整数,即不同的分法
样例输入
7 3
样例输出
4 {四种分法为:1,1,5;1,2,4;1,3,3;2,2,3;}
数据规模和约定
6<n<=200,2<=k<=6
分析:
这题关于数字的选择计算用暴力肯定拿不到满分,额自己暴力也60分,下面有大神的代码(100分)。
代码在此:(100分)
#include<stdio.h>int dfs (int n, int k) {if(n == k || k==1) return 1;else if(n < k) return 0;else return dfs(n-k, k)+dfs(n-1, k-1);} int main () {int n, k;scanf("%d%d", &n, &k);//n = 200;//k = 5;printf("%d",dfs(n,k));return 0;}
#include<stdio.h>#define SIZE 6int n, k;int dfs (int send,int for_n,int tran) {//send记录已经获取数字 for_n目前的总数 tran上一个数的值(避免往前循环) int i;int temp;int s = 0;if(send > k){if(for_n == n)return 1;return 0;}for(i = tran; i < n; i ++){//temp = for_n+i;if(temp > n)continue;s += dfs(send+1,temp,i);}return s;}int main () {int i;scanf("%d%d", &n, &k);printf("%d",dfs(1,0,1));return 0;}
0 0
- 蓝桥杯
- 蓝桥杯
- 蓝桥杯
- 蓝桥杯
- 蓝桥杯
- 蓝桥杯
- 蓝桥杯
- 蓝桥杯
- 蓝桥杯
- 蓝桥杯
- 蓝桥杯
- 蓝桥杯
- 蓝桥杯
- 蓝桥杯
- 蓝桥杯
- 蓝桥杯
- 蓝桥杯
- 蓝桥杯
- oralce清除归档日志,并定时制作window定时任务
- 百度地图开发之点聚合功能
- PHP常量深入学习 define和const的区别
- JSON JSONP理解
- JAVA集合
- 蓝桥杯
- Java Integer(-128~127)值的==和equals比较产生的思考
- 1016. 部分A+B
- [2017-03-09]深入浅出理解JSON
- (HDU)3336
- 内存泄露原因和解决方案
- Linux基础入门
- 展望游戏市场发展趋势
- home.pl 正在促销,一些域名免费(终止于2017.4.4)