鱼C论坛

 找回密码
 立即注册
查看: 5286|回复: 18

[争议讨论] 看了个数据结构的题,好沮丧,都怀疑自己智商了.....不知道大家遇到是什么情况....

[复制链接]
发表于 2012-8-16 21:56:35 | 显示全部楼层 |阅读模式
1鱼币
%D$QMYN8(G1{27A2[296G0N.jpg
看到这个题,别说动手写算法了,连怎么分析都不知道。这好像不仅仅是编程能力的问题。不仅怀疑一自己的这种分析能力,能在编程上走的远站得高么(说白了就是怀疑自己智商了)。。同志们说说你们看后的情况。有一看完题目,就出思路的么。。。。。。。

明天我再发出书上给的参考算法思路。[img]file:///C:%5CDocuments%20and%20Settings%5CAdministrator%5CApplication%20Data%5CTencent%5CUsers%5C1399470763%5CQQ%5CWinTemp%5CRichOle%5C%D$QMYN8%28G1%7B27A2[296G0N.jpg[/img]

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-8-16 23:39:52 | 显示全部楼层
自己顶一个........................
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-8-17 08:44:49 | 显示全部楼层
       没感觉!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-8-17 11:58:07 | 显示全部楼层
本帖最后由 服气 于 2012-8-17 12:05 编辑

6=1+1+1+1+1+1   
6=2    +1+1+1+1
6=3        +1+1+1
6=4            +1+1
6=5                +1
6=1+1+1+1+2  去掉
6=2    +1+1+2
6=3        +1+2
6=4            +2

6=1+1+1+3  去掉
6=2    +1+3
6=3        +3

6=1+1+4  去掉
6=2    +4


6=1+5 去掉
用归纳法
找找规律就出来了

划分数计算公式 :(((n-1)+1)×(n-1))/2)-(n-2)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-8-20 23:34:30 | 显示全部楼层
===没思路,只能看4楼的解法了,555555~难道吾智商有问题:Q?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-8-23 14:18:13 | 显示全部楼层
第一直觉,用递归比较好解决,期待其它同志们比较好的答案。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-9-27 02:24:53 | 显示全部楼层
很牛B,学习 了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-1-10 12:08:13 | 显示全部楼层
应该是种计算方法吧。。。。是不是公式啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-1-11 19:46:51 | 显示全部楼层
我连这道题是什么意思都不知道,怎么办?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-1-14 11:39:17 | 显示全部楼层
过来看看吧!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-2-3 19:06:48 | 显示全部楼层
第一眼感觉就是递归~~~,然后,就没有然后了:funk: 题目的意思就是一个数可以由多少个数组成(不分顺序),有点像统计概率里面的取球的那种例子。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-2-5 18:28:30 | 显示全部楼层
看了下题目,一般我拿到题目,我不急着写代码,分析问题,大致想下题目该用什么方法做比较好,能后找到题目中的关键点,进行算法描述!
看到此题我的第一想法就是用递归.
算法描述我不写了,代码注释里有,不懂问我!
  1. #include<stdio.h>
  2. #include <conio.h>
  3. int count=0;
  4. void function(int n,int t)//第二个两个参数的目的是在递归的时候进行判断
  5. {
  6.         int k;
  7.         for(int i=1;i<n;i++){//有规律可以知道都要循环n次
  8.                 k=n-i;          //k为分解的第一个数,i为分解的第二个数
  9.                 if (k<=t && i<=k )//当满足第一个数要小于递归传来的前面的值,第二个值要小于第一个值
  10.                 {
  11.                         count++;//统计个数
  12.                         function(i,k);//再次递归
  13.                 }
  14.                 else if (i>k && k<=t)//当第二个大于第一个数的时候,这个不满足
  15.                 {
  16.                         function(i,k);//仅递归,不统计个数
  17.                 }               
  18.         }
  19. }
  20. void main()
  21. {
  22.         int n;
  23.         scanf("%d",&n);
  24.         function(n,n);
  25.         printf("%d",count+1);//因为当函数调用的循环是从第一个开始,所以这里加1
  26.         getch();
  27. }
复制代码
网上另一解法源码:
  1. #include<iostream>
  2. using namespace std;
  3. int divide(int n , int m)
  4. {
  5. if(n < 1 || m < 1) return 0;
  6. if(n == 1 || m == 1) return 1;
  7. if(n == m) return (divide(n , m - 1) + 1);
  8. if(n < m ) return divide(n , n);
  9. if(n > m ) return (divide(n , m - 1) + divide(n - m,m));
  10. }
  11. int main()
  12. {
  13. int t;
  14. cin>>t;
  15.   cout<<divide(t , t)<<endl;
  16. return 0;
  17. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-9-16 22:01:59 | 显示全部楼层
还差1个鱼币
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-11-26 18:36:14 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-4-12 14:20:51 | 显示全部楼层
顶一个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-5 23:07:25 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-6 01:13:30 | 显示全部楼层
排列组合,为了避免重复,就如题中举例,划分数有大到小排列,比如6=5+1,这样1+5就不行
递归:从6里取2作为第一个的话,剩余4再划分时,不能超过2,这样就不会出现3,2,1,然后2,3,1再来一遍的情况:
  1. def fulldivision(n,limit,state):
  2.     if n==1 or n == 0:
  3.         yield (n,)
  4.     else:
  5.         for i in range(min(n,limit),0,-1):
  6.             for result in fulldivision(n-i,i,state + (i,)):
  7.                 yield (i,) + result
  8. c = 0
  9. for res in fulldivision(6,6,()):
  10.         c += 1
  11.         print ('Solution %d: ' % c,res)
复制代码

结果如下:
  1. Solution 1:  (6, 0)
  2. Solution 2:  (5, 1)
  3. Solution 3:  (4, 2, 0)
  4. Solution 4:  (4, 1, 1)
  5. Solution 5:  (3, 3, 0)
  6. Solution 6:  (3, 2, 1)
  7. Solution 7:  (3, 1, 1, 1)
  8. Solution 8:  (2, 2, 2, 0)
  9. Solution 9:  (2, 2, 1, 1)
  10. Solution 10:  (2, 1, 1, 1, 1)
  11. Solution 11:  (1, 1, 1, 1, 1, 1)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-6 01:17:49 | 显示全部楼层
这题目上面各位已经讲了,从八皇后里学到了一个yield,不得不用一下。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 14:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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