鱼C论坛

 找回密码
 立即注册
查看: 3823|回复: 7

[争议讨论] 算法每日一题(七)——____递归与分治

[复制链接]
发表于 2011-7-9 23:03:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
问题:将一个整数n表示成一系列的正整数之和:
         n = n1+n2+n3+n4+......+nk( n1>=n2>=n3>=nk>=1,k>=1)
被称作正整数n的一个划分。一个正整数n可能存在着不同的划分,例如正整数6的全部的划分为:
6 = 6
6 = 5 + 1
6 = 4 + 2        6 = 4 + 1 + 1
6 = 3 + 3        6 = 3 + 2 + 1   6 = 3 + 1 + 1 + 1
6 = 2 + 2 + 2   6 = 2 +2 + 1 + 1     6 = 2 + 1 + 1 + 1 + 1
6 = 1 + 1 + 1 + 1 + 1 + 1

提示:本题应用到分治与递归的思想,这是一种占有重要地位的算法思想,无论是问题的抽象,还是对逻辑理解的深入。
同时与本题同类型的是2011年蓝点杯的选拔赛试题,大家可以好好研究下。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-7-10 13:54:49 | 显示全部楼层
本帖最后由 风扫地 于 2011-7-10 13:56 编辑

占楼。。try一下。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-7-10 16:13:55 | 显示全部楼层
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #define N 1000
  4. //存放划分出来的整数
  5. //vec[0]为要划分的整数
  6. int vec[N];

  7. void work();
  8. void getPartition(int n, int pos);
  9. void print(int pos);
  10. int main(){
  11.         while(scanf("%d",vec)!=EOF) work();
  12. }

  13. void work(){
  14.         getPartition(vec[0],1);
  15. }
  16. void getPartition(int n,int pos){
  17.         if(n>0){
  18.                 int i;
  19.                 for(i=min(n,vec[pos-1]);i>0;--i){
  20.                         vec[pos]=i;
  21.                         getPartition(n-i,pos+1);
  22.                 }
  23.         }
  24.         else print(pos);
  25. }

  26. void print (int pos){
  27.         int i;
  28.         printf("%d=%d",vec[0],vec[1]);
  29.         for(i=2;i<pos;++i) printf("+%d",vec[i]);
  30.         printf("\n");
  31. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-7-10 16:16:38 | 显示全部楼层
。。。效率低了,没记录重复出现的子问题的解。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-7-10 20:19:44 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-7-10 21:06:56 | 显示全部楼层
20110710492.jpg


20110710493.jpg


20110710494.jpg
20110710491.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-7-11 08:20:38 | 显示全部楼层
加上min的声明和实现
int main(int a, int b){return a<b?a:b;}即可。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2015-5-14 16:52:41 | 显示全部楼层
{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-9 20:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表