免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5444 | 回复: 13
打印 上一主题 下一主题

算法小考,小伙伴们来试试吧 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-12-10 15:46 |只看该作者 |倒序浏览
本帖最后由 cj4777 于 2013-12-10 19:44 编辑

  1. test = {8: ',3,4,5,6,7,9,13,15,',
  2.            9: ',6,7,10',
  3.            3: ',2,16,21',
  4.            21: ',8,9,11,14'}
复制代码
以上是一个字典,其中,比如键有 8、9、3、21,test[8]的值有,3,4,5,6,7,9,13,15, test[3]的值有',2,16,21',test[21]的值有',8,9,11,14',写一个函数,要求返回其中循环的值

比如上示代码的循环数据(要求函数的返回值)为:

        test[8] = 3
        test[3] = 21
        test[21] = 8

      可以把等号左边的键8、3、21理解成某组领导,等号右边为其直接下属,其中 领导8 的下属是3,领导3的下属是21,领导21的下属是8,
这样三个人就形成了循环,本来领导8应该是最高长官,但是到了最后变成了最低职位的21的下属,所以,写一个函数,返回一些提示,只要找出能够找到这几个循环就可以。
说下我的解决思路,也相当于变相的帮助各位看官理解题意,先遍历test[8],找到第一个值3,然后查找test[3],遍历test[3],第一个值为2,继续找test[2],这时发现没有这个值,就删除test[3]=2,继续遍历test[3]的第二个值16,以此类推,一直到只剩下
        test[8] = 3
        test[3] = 21
        test[21] = 8
然后输出这些值,如果没有这样的循环,就退出。

注意:字典长度未知,而且循环的个数未知,比如,示例中只有三个对应的键/值循环,但是,实际上可能会有四个、五个甚至更多对应键/值的循环。
如果没理解题意我可以补充。

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
2 [报告]
发表于 2013-12-10 17:17 |只看该作者
递归?

论坛徽章:
4
金牛座
日期:2013-10-11 16:12:50卯兔
日期:2014-07-31 09:17:19辰龙
日期:2014-08-08 09:28:02狮子座
日期:2014-09-14 20:32:05
3 [报告]
发表于 2013-12-10 17:42 |只看该作者
要求返回其中循环的值


循环的什么值?

论坛徽章:
0
4 [报告]
发表于 2013-12-10 18:06 |只看该作者
本帖最后由 cj4777 于 2013-12-10 18:07 编辑

回复 3# ssfjhh


    比如我上边写的字典test的例子,返回
        test[8] = 3
        test[3] = 21
        test[21] = 8
或者
       返回什么都可以,只要找出来这些循环的数据就好。

论坛徽章:
0
5 [报告]
发表于 2013-12-10 18:24 |只看该作者
回复 2# q1208c


    这位小伙伴,再具体一点说说呗。

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
6 [报告]
发表于 2013-12-10 19:53 |只看该作者
回复 5# cj4777

基本上, 就是一个递归算法呀. 唯一的不同是, 你的递归需要成环才能退出.
   

论坛徽章:
0
7 [报告]
发表于 2013-12-10 20:12 |只看该作者
本帖最后由 cj4777 于 2013-12-10 20:13 编辑

回复 6# q1208c


    上个代码呗,或者伪代码也可以

论坛徽章:
0
8 [报告]
发表于 2013-12-10 23:04 |只看该作者
看了两天天这个python了,想好好学习,又怕坚持不下去。。。哎。。。
不过似乎我明白楼主的意思了。。。

======================
楼主是想通过字典中的其中一个键值A找到对应的元组中是否包含其他的键值B并找到它,
再通过这个键值B找其对应的元组中是否还有其他的键值C。
直到这个最后被找到的键值N=最初的键值A就是一个循环。。。

由于字典中只有四个键值,但是test[9]=(6,7,10) 不包含任何其他的键值(8,3,21)
就是分别拿集合C1 =(3,4,5,6,7,9,13,15)  C2 =(6,7,10)  C3 =(2,16,21)  C4 =(8,9,11,14) 同集合K =(8,9,3,21)去取交集。
得C1K=(3,9) C2K=( 空集) C3K=(21) C4K=(8,9)
testK={8 : '3,9' , 9: '', 3: '21', 21: '8,9'} 应为test[9]=None(级领导9不可能有下属,就不需要计入循环), delete 所有的9.
我们得到一个testKD={8 : '3' , 3: '21', 21: '8'}
return testKD[key]
应该会得到一个
        test[8] = 3
        test[3] = 21
        test[21] = 8
======================
不会写啊。。。蛋疼。。。

论坛徽章:
0
9 [报告]
发表于 2013-12-10 23:08 |只看该作者
好像一句话可以概括上面啰嗦的东西:


先求出下属中的领导集B,再把领导集B跟伪领导集A 求交集 得到所有有下属的领导。
这些领导必然都不会在这条食物链的最底层。

论坛徽章:
0
10 [报告]
发表于 2013-12-10 23:09 |只看该作者
还是不知道怎么写。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP