问个项目中遇到的算法问题

问题描述

业务场景:用户需要购买一批物料进行生产,购买需求如下:物料数量A1A2B3C4B5B6A,B,C三种物料为替代料(随便买哪种都行)请调整物料,使A,B,C调整后的比率最接近(A:B:C=5:3:2)请给出算法或代码,谢谢.

解决方案

解决方案二:
你这是项目,还是家庭作业,怎么那么奇葩呢为什么ABC不是一次性给出数量,而是分成那么多行而如果调整成5:2:3之后,也要跟原来一样分那么多份么?
解决方案三:
只调整A,B,C其他的不要动...且问题一点也不奇葩.
解决方案四:
算比率好算,都加起来,乘上系数,就是每一种的数量了问题是,A1A2如果最终确定A应该买4个,那按什么规律将4个再分成2组?是平均分,还是按比例分?
解决方案五:
引用2楼snow9704的回复:

只调整A,B,C其他的不要动...且问题一点也不奇葩.

这话我就听不懂了.还有其他?我只看到很多个ABC,没看到有其他而只调整ABC,A和B都有好多个,到底调整全部,还是调整哪个?
解决方案六:
需求不明确吧,好模糊不懂
解决方案七:
解答者不需要观需求是如何产生的,只需要管算法如何实现,谢谢。上面的数据只是我给出的测试数据,真实数据集合的长度肯定要多上不少。
解决方案八:
A1A2B3C4B5B6通过算法(现在的问题)得出结果:A1A2A3C4A5B6
解决方案九:
物料这列的数据可以清掉,然后从(A,B,C)任选一种,输出的结果:A:B:C的购买数量无限接近50%:30%:20%就可以了.
解决方案十:
引用6楼snow9704的回复:

解答者不需要观需求是如何产生的,只需要管算法如何实现,谢谢。上面的数据只是我给出的测试数据,真实数据集合的长度肯定要多上不少。

算法是什么?算法是实现需求的需求不明确,谈何算法!
解决方案十一:
好吧,就谈谈需求吧。客户需要生产一批成品物料,通过需求计划及BOM分解出需要购买以下这样的一些物料:x1x2x3x4x5x6其中x表示替代物料组的意思。x替代物料组中包括A,B,C三种具体的物料。也就是说x用A或B或C来替代都可以。但考虑A,B,C的成本及其他因素,购买A,B,C要按照一定的比例购买。即我上面提供的50%:30%:20%来购买。算法执行后提供出一款具体最佳的方案给用户。如:A1A2A3B4B5C6方案的实际比率为6/21:9/21:6:21符合无限接近50%:30%:20%注:可以看出,以上方案不是最佳方案。不想谈需求的原因是:需求我已经进行过分析了,现在已经具体到算法了。
解决方案十二:
如lz测试例子总共21个物品可被替换现在abc要50%30%20%那直接21*0.5=10.5四舍五入11A就11个然后(21-11)*0.6=6B就6个最后C等于4个按这顺序计算一下就好了需要什么复杂的算法吗?你是需求是要11个A6个B4个C在具体分成a:1a:2a:3a:5b:6c:4这样?
解决方案十三:
所以说,需求你还没分析明白.所以方案也出不来.或者你心里知道,但是不会说.x后面的数量是固定的,不可更改,而且行数也是固定的,不可更改,仅仅是将x替换成abc?判断是否最佳方案的标准又是什么?
解决方案十四:
tolaiyongxin:对,就是要得出这样一个结果.具体的代码如何实现,需要动态算,
解决方案十五:
x后面的数量是固定的,不可更改,而且行数也是固定的,不可更改,仅仅是将x替换成abc?回答:对.判断是否最佳方案的标准又是什么?回答:这个目前还没定,暂时考虑计算出实际方案的比率.和希望的比率进行比较,选择偏差值接近0的.
解决方案:
可选的方案应该为X(可替代物料)的N(购买集合的长度)次方.现在遍历输出所有可能方案程序不知道如何写...
解决方案:
引用15楼snow9704的回复:

可选的方案应该为X(可替代物料)的N(购买集合的长度)次方.现在遍历输出所有可能方案程序不知道如何写...

简单啊,递归,有多少行就递归多少次然后每一次里面做个for循环,将当前行分别赋值成A,B,C最终递归完一次,就输出个结果然后算一下比率,记住再出一个结果,和上一次的比较,更优就替换,否则丢弃全部递归完,将最优解输出
解决方案:
能帮忙写下输出所有方案的代码吗?计算最优的代码就不需要了,十分感谢!
解决方案:
递归岂不是要慢死……
解决方案:
引用18楼xd321yes的回复:

递归岂不是要慢死……

快还是慢,是相对的看到底有多少数据,是否能够忍受的时间内算出来,就行了除非你有更好的办法,否则不要光吐槽啊
解决方案:
引用19楼Z65443344的回复:

Quote: 引用18楼xd321yes的回复:
递归岂不是要慢死……

快还是慢,是相对的看到底有多少数据,是否能够忍受的时间内算出来,就行了除非你有更好的办法,否则不要光吐槽啊

好吧我承认没有更好的办法了。。。
解决方案:
引用17楼snow9704的回复:

能帮忙写下输出所有方案的代码吗?计算最优的代码就不需要了,十分感谢!

classProgram{string[]re=newstring[6];staticvoidMain(string[]args){Programaa=newProgram();aa.GetMethod("A",0);aa.GetMethod("B",0);aa.GetMethod("C",0);Console.ReadLine();}publicvoidGetMethod(stringA,intn){if(n==6){Output(re);return;}re[n]=A;GetMethod("A",n+1);GetMethod("B",n+1);GetMethod("C",n+1);}publicstaticvoidOutput(string[]re){for(inti=0;i<re.Length;i++){Console.Write(re[i]+"");}Console.WriteLine();}}看着个行不,……
解决方案:
introwsCount=6;string[]resultList=newstring[rowsCount];voidgetValue(intstep,intmaxStep){stringstrValue="";for(inti=0;i<3;i++){switch(step){case0:strValue="A";break;case1:strValue="B";break;case2:strValue="C";break;}resultList[step]=strValue;if(step<maxStep){getValue(step+1,maxStep);}else{foreach(stringsinresultList){Console.WriteLine(s);}}}}

解决方案:
如果需要执行比较并保存结果,写到上面的else里就行了
解决方案:
好的,我试一下.

时间: 2024-08-29 12:58:08

问个项目中遇到的算法问题的相关文章

问一下大神这个c++中的这些算法是怎么运行的

问题描述 问一下大神这个c++中的这些算法是怎么运行的 问一下大神这个c++中的这些算法是怎么运行的 例如 unique_copy 求大神解释详细一点 谢谢 解决方案 ........... 解决方案二: 拷贝,但是遇到重复的只保留一个http://www.cnblogs.com/heyonggang/archive/2013/08/07/3243477.html 解决方案三: 按步骤来 解决方案四: 你是不知道怎么运行的, 还是不知道怎么执行的.?

eclipse3.6新建项目中没有swt/jface随便问一下用swt/jface怎么做界面开发

问题描述 如题,怎么使eclipse3.6集成到swt/jface中,那里下载,怎么swt/jface做办面开发 解决方案 解决方案二:eclipse下关于RCP版得,然后http://apps.hi.baidu.com/share/detail/24455394,根据这个网址,基本上差不多解决方案三:引用楼主zh346400987的回复: 如题,怎么使eclipse3.6集成到swt/jface中,那里下载,怎么swt/jface做办面开发 这你算问对了哈哈这个版块局势围绕swtjfacerc

想问朋友面试中遇到的一个算法题:

问题描述 想问朋友面试中遇到的一个算法题: Write a program in Java to assess a given string whether it complies with following patterns. Return true if a given string complies with these patterns else false. N = N1 + N2 N>= N1 >= N2 where N is the Nth element in the str

python中的list操作和计算,问大家解决这个问题的算法。叙述的不好,但真的不会&amp;amp;gt;_&amp;amp;lt;

问题描述 python中的list操作和计算,问大家解决这个问题的算法.叙述的不好,但真的不会>_< 有一个这样的列表,a = [[123, 233], [334, 342], ..........[123432,123444]] 情况是:数字从头到尾,后一个大于前一个,不管是123比233还是233与334这样的相对位置. 然后我有一个b = [x, y],其实x和y都是具体的数但不一定是多少,x >= 0, y >= 0, 我做的是: 如果x是小于123,y是大于123444,

url-?求问:structs项目中,如何执行删除文件操作URL且不发生跳转

问题描述 ?求问:structs项目中,如何执行删除文件操作URL且不发生跳转 我想在web端执行删除文件操作,一开始想参考表单验证中, url:'', success:funtion(){} 但未能成功,于是使用了window.location.href,结果删除功能确实实现了,但删错操作后,页面总是会跳转到一个空页面上. 求问各位大神有什么办法,给个提示.谢谢! js代码: window.location.href = 'deleteFile?id='+rs[0].data.fileId;

为什么面试时候总问你在项目中遇到的难点?(转)

问你怎么解决的.也就是要看你所认为的难题有多难.看你的经历.从事工作纵向深入的程度.比如这两个难题在键盘上找26个英文字母和组建一套服务器. 往往面试人所说的自己达到的程度,都有水分,只有你项目中遇到的问题并采取解决的手段,能切实反映你的真实程度. 考察一个人克服困难的能力吧,包括发现问题.分析问题.解决问题,是否会通过相关书籍.搜索引擎来查找相关资料,是否会去相关论坛.身边人求助,以及解决问题后是否会总结记录等等.. 哈哈,这个是我在面试过程中必问题,这个问题的回答可以看出很多与技术本身无关的

snapshot-请问,用maven项目中,在pom.xml配置如下信息是配置的什么?

问题描述 请问,用maven项目中,在pom.xml配置如下信息是配置的什么? com.exampleexample-common1.0-SNAPSHOT 解决方案 请百度maven基础.

实际编程中需要多少算法?

问题描述 实际编程中需要多少算法? 实际编程(主要是Android开发方向)中需要多少算法?有必要参加ACM校队吗? 解决方案 低端开发者(典型的xxx方向开发者)不需要任何算法,这种开发者我们叫做"胶水程序员",他们不创造可以重用的,有价值的程序,他们的工作是把现成的组件和框架按照需求粘合起来. 程序员当然需要算法.因为实际项目中各种各样的需求,没有任何现成的算法可以直接解决. 解决方案二: 就拿现在你用的这个csdn问答为例,当你输入一个问题,它会自动给你匹配一些标签.旁边有其他相

方法-JAVA项目中做登录加密操作

问题描述 JAVA项目中做登录加密操作 在项目中做用户登录操作,如果一个陌生人随意乱输用户名和密码,假定正好输入都正确(数据库中已保存的),为避免此类问题发生,要对登录做加密,使用MD5方法是不是比较好,是否还有其它好的方法,谢谢 解决方案 因此,作为这个用途,那些不可逆的散列算法都可以达到这个目的,比如MD5.SHA1等等,以及它们的变种,比如两次MD5,加上一个随机数再MD5(俗称加盐).为什么要变化?因为人们将常见密码和MD5存入一个很大的数据库,所以反插起来很容易. 解决方案二: MD5