首页新闻招聘找找看知识库

算法大神进,这道题有什么好思路没,小弟一直还没想到什么好的方法解决

0
悬赏园豆:10 [已解决问题]

说下思路就行 ,

20字20字20字20字20字20字20字20字20字20字

Z·Lawliet的主页 Z·Lawliet | 初学一级 | 园豆:102
提问于:2017-02-17 15:00
< >
分享
最佳答案
0

假设A有m个,B有n个(给的数字合理),规定其中A用0表示,B用1表示。先算出塔的高度h  (h*(h+1)/2=m+n),给塔的每个机器人从最顶端从0开始编号一直到m+n-1,然后用一个int[m+n] 数组来存储每个位置的值(1或0)。先不考虑满足要求的排列,将给的数字的可能的情况排列出来(用递归算法整,不知道可以到网上搜一下),然后把所有可能存储起来(例如放入集合中),然后从可能的情况中,找出满足条件的:给每一层编号,从高到低从1到h。前m+n-h个位置的值都应满足a[i]==a[i+j]^a[i+j+1],其中i为当前机器人所处的位置,j为当前机器人所处位置的层,其中^表示异或计算(0^0=0,,1^1=0,1^0=1)。然后设置一个一个计数器,符合条件的就加一,然后打印计数器。

收获园豆:10
小调~ | 初学一级 |园豆:190 | 2017-02-17 18:25

大神。。。!没听懂。。。。,这个异或这样处理的作用是什么,还有数字的可能的情况排列?怎么排列?大神可以细讲一下吗

Z·Lawliet | 园豆:102 (初学一级) | 2017-02-18 19:20

@Z·Lawliet:

兄弟你凑合着看吧,主要是要想说明白我的思路,又要文字,又要图的,还是是手写,然后给你发图片。这次举了一个例子,说不定能跟你把思路说清楚。算法问题吧主要是会模型转换,找到其中的联系。关于程序实现,其实不难,自己多思考思考,多动动手~

小调~ | 园豆:190 (初学一级) | 2017-02-18 21:01
其他回答(1)
0

这个应该不难,不过10园逗可划不来写这么一个算法,费了一天脑子了。 学程序就要自己研究呢,这个东西正好可以练你的算法能力么。

沧海一杰 | 园豆:32 (初学一级) | 2017-02-17 16:00

是,只是想请教下别人不同的思路,不需要特别详细的算法。我自己思考过了想一个方法,好问题还是拿出来讨论不是更好吗

Z·Lawliet | 园豆:102 (初学一级) | 2017-02-17 16:04

@沧海一杰: 哦哦 没看到 没事

Z·Lawliet | 园豆:102 (初学一级) | 2017-02-17 16:08

照我的想法,可能效率不高。先组合出AB所有的塔(无视规则),然后检查每个塔是否符合规则。

沧海一杰 | 园豆:32 (初学一级) | 2017-02-17 16:11

@沧海一杰: 那这个塔怎么存储

Z·Lawliet | 园豆:102 (初学一级) | 2017-02-17 16:29

@Z·Lawliet: 不知道你用什么语言,c#就用List<List<string>>。

沧海一杰 | 园豆:32 (初学一级) | 2017-02-17 16:32

每一行是若干个字符串,是一个List, 然后是多行,就是双重List

沧海一杰 | 园豆:32 (初学一级) | 2017-02-17 16:33
   您需要登录以后才能回答,未注册用户请先注册