求高手帮忙,算法问题

hsmc_mcm 2012-06-11 03:58:52
问题描述:
1、有两个数组,分别为A和B,其中每个数组固定含有4个元素,分别是A1,A2,A3,A4,B1,B2,B3,B4
2、每次从A数组中取出一个元素,并确定该元素是否命中(已写好命中判断函数,设为XXX(e))【最多只会2个元素同时命中】
3、如果A元素中有命中,则记录该元素,假设A1命中,对A1进行记录,然后在B数组中找到任意1-2个命中,并分别记录B数组的值,且记录是在哪个A元素命中后该B元素才命中的,比如A1命中,在此基础上B2和B3命中,则B2和B3记录的同时,要求记录其前置条件为A1命中
4、在3的命中条件都成立后(假设3条件是A1命中后B3命中),再次从A数组中取值,但是此次要排除上面已经命中过的A元素(也就是A1),然后判断命中的A元素,并记录(假设此次A3命中),并且需要记录前置条件B命中元素(也就是B3)
5、4条件满足后,再次从B数组中取值,但是此次要排除上面已经命中过的B元素(也就是B3),然后判断命中的B元素,并记录(假设此次B2命中),并且需要记录前置条件A命中元素(也就是A3)
6、在5条件满足后,第三次从A数组中取值,但是此次要排除上面已经命中过的A元素(也就是A1和A3),然后判断命中的A元素,并记录(假设此次A4命中),并且需要记录前置条件B命中元素(也就是B2)
7、6条件满足后,第三次从B数组中取值,但是此次要排除上面已经命中过的B元素(也就是B3和B2),然后判断命中的B元素,并记录(假设此次B1命中),并且需要记录前置条件A命中元素(也就是A4)
8、最后剩余的A元素和B元素(按照上面描述,最终剩余的是A2和B4),将和上面几步中的最终排列结果组合成一个序列,即从A1命中开始,A1-B3-A3-B2-A4-B1-[A2-B4],即按顺序把命中的结果都组合起来,在最后拼接上最终剩余的A2和B4,得到一个最终序列
9、在3-7步骤里,任何一个步骤如果出现不命中,都会返回到3步骤,重新取另一个A元素进行计算,直到遍历完A数组为止

简化的描述就是,在A数组中任意取一个元素,如果命中,再从B数组中任意取一个元素,如果再命中,则再从A元素任意取一个元素(排除前面已经取得的),如果再命中,再从B数组取一个元素(排除前面已经取得的),依次类推,这个操作计算三次(A元素计算命中后再计算B元素命中,称为1次),如果1,2, 3次计算中出现任意一次全部未命中(包括A和B),该序列都不参与输出,如果3次计算都满足,则将该组合输出,并拼接A数组中剩余的最后一个元素和B数组中剩余的最后一个元素

示例:(括号内的是否代表是否命中)
1、A1(是)-B4(是)-A4(是)-B2(是)-A3(是)-B1(是)-[A2-B3] 符合条件,输出
2、A1(是)-B4(是)-A4(是)-B2(是)-A3(是)-B1(否) [B数组在第三次计算时出现未命中,如果B数组在第三次里全部不命中,此序列失效,不参与输出]
3、A1(是)-B4(是)-A4(否) [A数组在第二次计算时出现未命中,如果A数组在第二次里全部不命中,此序列失效,不参与输出]
4、其他情况可根据2和3类推

求高手指点应该如何做,想了几天了,想不出办法
...全文
51 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
showlie 2012-06-11
  • 打赏
  • 举报
回复
这问题描述真够长的,你应该把简单描述放在前面。。。
有个疑问:
A数组的命中判断函数为XXX(e),可你没说B数组的命中函数,听你的描述B的命中函数是跟A数组中所命中的值有关联,可描述中未说明。

其实,问题不要搞得这么复杂,简单的说就是遍历数组,获取符合要求的元素值。是这个理吗?
T[] matches = Array.FindAll<T>(A,Predicate<T> match);

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧