请教一个算法问题,用C#如何实现。

问题描述

有队列A,里面有X个对象,每个对象的值为1-100不等。有队列B,里面有Y个对象,每个对象的值为1-100不等。两个队列中的对象个数是不确定的。需要从A队列中按序号取出一个或多个对象出来,其对象的数值总和与队列B中按序号优先级取一个或多个对象的值相等。匹配方式优先级:1、A队列中按序号大小优先顺序取一个对象能与B队列中也按序号大小优先级取对象匹配,这属于1对1匹配。最优先匹配的。2、A队列中所有单个对象值无法与B队列中的单个对象值匹配的情况下,再从A队列中按序号大小优先顺序取一个对象能与B队列中也按序号大小优先级取多个对象值匹配。这属于1对N匹配。3、第一种与第二种情况下都无法匹配上,从A队列按序号大小顺先顺序中取多个对象与B队列中的也按序号大小优先级取一个对象值匹配。这属于N对1匹配。4、第一种与第二种情况下都无法匹配上,从A队列按序号大小顺先顺序中取多个对象与B队列中也按序号大小优先级取多个对象值匹配。这属于N对象匹配。例:1对1匹配:A队列中的第1个对象值为5,与B队列中第3个对象匹配。1对N匹配:A队列中的第1个对象与B队列中第2个与第6个、第10个对象值之和匹配。N对1匹配:A队列中第2、5、10对象对B队列中第3个对象匹配。N对N匹配:A队列中第2、5、10对象对B队列中第3、4、6、7对象匹配。这种是什么算法问题,用C#如何实现?

解决方案

解决方案二:
用过的可否在用?
解决方案三:
比较n和t大小.假如n<t.拿A1-b1.a2-b2……an-bn计算差是否有为零的组,有则满足第一种匹配.
解决方案四:
理解错了.这个题目貌似没有什么特殊的算法,只能按条件一步一步运算
解决方案五:
头三种情况还好说一点,在程序上是可以实现的。第四种情况就比较麻烦,第四种情况下的N对N,有没有什么算法?
解决方案六:
步骤一:先从AB队列取首个数字,如果相等则满足条件1步骤二:如果不等,则从较小值所在队列取一个数字相加后再与之前的数字比较,如果相等则满足条件2或3步骤三:重复步骤二直到两边数字和相等,满足条件4
解决方案七:
设有:Combination可对队列做n中取m的组合Sum可对队列求和则(伪码)for(a=1;a<=队列A.Count;a++){foreach(AinCombination(队列A,a)){t=Sum(A);for(b=1;b<队列B.Count;b++){foreach(BinCombination(队列B,b)){if(t==Sum(B){}}}}}

解决方案八:
引用6楼xuzuning的回复:

设有:Combination可对队列做n中取m的组合Sum可对队列求和则(伪码)for(a=1;a<=队列A.Count;a++){foreach(AinCombination(队列A,a)){t=Sum(A);for(b=1;b<队列B.Count;b++){foreach(BinCombination(队列B,b)){if(t==Sum(B){}}}}}

谢谢!这个可以解决问题了!

时间: 2024-07-31 02:47:35

请教一个算法问题,用C#如何实现。的相关文章

请教一个算法问题时间复杂度要求是(1)

问题描述 请教一个算法问题时间复杂度要求是(1) 做项目的时候有一个处理大致是这样的:需要每次插入map;每次输入是(1,0),(2,0),(3,0):(2,1),(3,1)...当key是新添加的或者key对应的count大于前一次就要把这个key拿出来,时间复杂度要求是O(1), 请教大家有没有好的方法 解决方案 不可能事件复杂度是1,最低是LogN,不过这个很接近1了.除非你有无限制的内存,然后直接地址映射. 解决方案二: 一个数组中只有0,1,2三个元素,进行排序,要求时间复杂度为O(n

请教一个算法问题,有两个数组A,B,判断A中是否至少有一个元素和B中元素相同

问题描述 最笨的办法当然是二层嵌套循环,但觉得应该有更好的方法,但是着实想不出来,想听听大家的意见,大家帮帮小弟i.estring[]A={"X","Y","Z","W"};string[]B={"X","E","Z","U","V"};只要发现B中有一个A的元素就可以 解决方案 解决方案二:数据量不大(100条内100*100

请教一个算法问题

问题描述 计算一下当前时间到周三中午12点还有多少时长?哪位帮忙给写个伪代码, 解决方案 package com.kuke.update.timmer;import java.util.Calendar;import java.util.Date;import java.util.TimerTask;import java.util.concurrent.Executors;import java.util.concurrent.ScheduledExecutorService;import j

赋值-请教一个php自由增减的小算法。

问题描述 请教一个php自由增减的小算法. $i在0~30 的时候,$j是自由增减的,$i==30的时候,$j的值也一定要自由增减到30,不要直接就赋值30,这个算法怎么写呢? 解决方案 问题问的不是很清楚,$j自由增减是如何自由增减呢? 算法大体是这样: 1.先判断$i的值,是否在0~30里面 2.如果$i在0~30里面,$j自由增加,如果$i ==30,判断$j是否为30,是,结束代码,不是,$j++或$j-- 解决方案二: 我是新手,什么是自由增减呢,是随机增加一个数还是什么?如果是这样可

算法 选择排序-请教一个选择排序的算法问题

问题描述 请教一个选择排序的算法问题 你好, 我刚刚开始接触JAVA, 问一个选择排序的问题. private static void SelectionSort (int[] arr) { for(int i=0; i for(int j=i+1;j if (arr[i] > arr[j]) { int m; m = arr[i]; arr[i] = arr[j]; arr[j] = m; } } } } 这个方法正确,但是交换次数多了,所以我想改进一下. private static voi

c语言-请教一个C编程 打印输出图像的算法编程

问题描述 请教一个C编程 打印输出图像的算法编程 解决方案 大概就是这样,建立笛卡尔坐标系. 用point()函数里的嵌套for循环来输出每一个字符,然后把代表坐标的i和j传递给getChar()函数通过坐标来决定输出的是什么字符. 解决方案二: char getChar(int x,int y,int n) { if(x<0) x=-x; if(y<0) y=-y; if(x>y) { if(n-x<=2) return 'x'+n-x; else return '0'+n-x-

请教一个应用推荐算法

问题描述 请教一个应用推荐算法 看到百度一个关于应用推荐的算法,算法描述如下: 一种在线应用搜索方法为步骤: 解决方案 比如说,产生一个0-9的随机数,按理说结果为1的可能性为0.1,结果为2也是0.1,等等. 但是我们可以制造一个随机数发生器,产生1的可能性为0.5,产生2的可能性为0.25,-- 这就是不等概率. 不等概率随机数的生成可以通过标准随机数生成算法衍生出来. 比如产生一个0~1的浮点数,那么产生值在0~0.5的概率是0.5,0.5~0.75的概率是0.25,--,据此判断,并且返

sql-求助:请教一个SQL语句的算法

问题描述 求助:请教一个SQL语句的算法 业务逻辑:在财务中,在一个结算周期内的结算金额没有达到结算限额,则此次不做结算,将此次结算金额累计到下一个结算周期内结算,直到满足结算限额才结算.其中每一个合同的计算限额不同. 举例:已知的合同号001的结算限额为200 ,合同号002的结算限额为300 合同号A 结算日B 结算金额C 想得到的结果D 001 1.1 100 0 001 2.1 110 210 001 3.1 120 0 001 4.1 130 250 001 5.1 140 0 001

后台-请教一个关于网站用户密码保存的问题

问题描述 请教一个关于网站用户密码保存的问题 之前自己做过一个简单的网页有登录注册功能的,但是我是直接将用户注册的名字和密码保存在数据库中,换句话说,我可以在数据库里直接看到用户的密码.当然这只是一个个人简单的小demo,但我想问一下,在实际投入运行的网站中,他们是怎样保存用户的密码的?后台人员能够从数据库中看得到用户的密码吗?如果看不到,那比如我们要修改密码的话,后台又是如何判断我输入的密码是否是原来的密码? 求教一下~谢谢~ 解决方案 一般来说,我们使用哈希(Hash)算法来存储密码. 其中