假设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)。然后设置一个一个计数器,符合条件的就加一,然后打印计数器。
大神。。。!没听懂。。。。,这个异或这样处理的作用是什么,还有数字的可能的情况排列?怎么排列?大神可以细讲一下吗
@Z·Lawliet:
兄弟你凑合着看吧,主要是要想说明白我的思路,又要文字,又要图的,还是是手写,然后给你发图片。这次举了一个例子,说不定能跟你把思路说清楚。算法问题吧主要是会模型转换,找到其中的联系。关于程序实现,其实不难,自己多思考思考,多动动手~
这个应该不难,不过10园逗可划不来写这么一个算法,费了一天脑子了。 学程序就要自己研究呢,这个东西正好可以练你的算法能力么。
是,只是想请教下别人不同的思路,不需要特别详细的算法。我自己思考过了想一个方法,好问题还是拿出来讨论不是更好吗
@沧海一杰: 哦哦 没看到 没事
照我的想法,可能效率不高。先组合出AB所有的塔(无视规则),然后检查每个塔是否符合规则。
@沧海一杰: 那这个塔怎么存储
@Z·Lawliet: 不知道你用什么语言,c#就用List<List<string>>。
每一行是若干个字符串,是一个List, 然后是多行,就是双重List