一个算法求最小值,要写出代码但是我已经忘记了不会解,求大神帮解

魑魅玲儿 2015-07-13 04:31:30
我现在需要在超市采购一定重量(变量)的鱼罐头,现超市货架有5种重量规格,100克、50克、30克、15克、10克,如何以最少的罐头数来搭配所需的重量(确实无法完整搭配的情况不考虑,如需求101克这类情况不需考虑),请写出代码。
注意:代码必须具备重用性,修改5种重量规格后代码依然可以满足需求。
...全文
208 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wish907 2015-07-14
  • 打赏
  • 举报
回复
确实无法完整搭配的情况不考虑,如需求101克这类情况不需考虑 想了一下这种要求 2L给的代码应该就可以了
wish907 2015-07-14
  • 打赏
  • 举报
回复
贪心算法? 先排序,然后从最大开始拿? 但是是不是比如要拿90,但是只能50+30+10。我就是路过
魑魅玲儿 2015-07-14
  • 打赏
  • 举报
回复
各位大神果然给力,二楼实在
  • 打赏
  • 举报
回复
简单来说,就是有那么两行“递归”思路,主要是看你写出的程序能不能这样又简单又方便求解。
  • 打赏
  • 举报
回复
这主要是看你有没有回溯的能力。例如155,如果你选择了100、50之后,程序知道放弃50,这样的程序就测试通过了!
  • 打赏
  • 举报
回复
这需求不是最短路径算法么?
xuzuning 2015-07-13
  • 打赏
  • 举报
回复
一种写法
        static void Main(string[] args)
        {
            var r = 配货(180, new int[] { 100, 50, 30, 15,10});
            foreach (var o in r)
            {
                Console.WriteLine("{0} : {1}", o.Key, o.Value);
            }
        }
        static Dictionary<int, int> 配货(int m, int[] list)
        {
            var res = new Dictionary<int, int>();
            Array.Sort(list);
            Array.Reverse(list);
            var i = 0;
            var n = 0;
            while (i < list.Length && m>0)
            {
                if (m >= list[i])
                {
                    m -= list[i];
                    n++;
                }
                else
                {
                    if (n > 0) res[list[i]] = n;
                    n = 0;
                    i++;
                }
            }
            if (n > 0) res[list[i]] = n;
            return res;
        }

110,534

社区成员

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

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

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