请教一个使用c#平均分水果的程序或思路

microsoftthx 2015-05-07 03:48:18
请教一个使用c#平均分水果的程序或者思路
程序同时满足下面的情景
情景1:
假如有3个人A、B、C, A手里有0个,B手里有0个,C手里有0个水果
假设要分5个水果给这三个人,确保每个人手里的水果尽量平均,最后分完后A手里有2个,B手里有2个,C手里有1个
情景2:
假如有3个人A、B、C, A手里有1个,B手里有3个,C手里有0个水果
假设要分1个水果给这三个人,确保每个人手里的水果尽量平均,最后分完后A手里有1个,B手里有3个,C手里有1个

非常感谢!



...全文
135 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
microsoftthx 2015-05-07
  • 打赏
  • 举报
回复
学习中......
microsoftthx 2015-05-07
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
static void AllotApple(List<Person> persons, int totalApples)
        {
            if (persons.Count < 2)
            {
                throw new Exception("如果要分配,那人数至少要二人");
            }
            while (totalApples > 0)
            {
                var tmpPersons = persons.OrderBy(x => x.AppleNow + x.AppleAdd).Take(2).ToList();
                var addApples = Math.Min(totalApples, tmpPersons[1].AppleAdd + tmpPersons[1].AppleNow - tmpPersons[0].AppleAdd - tmpPersons[0].AppleNow);
                if (addApples == 0)
                {
                    addApples = 1;
                }
                tmpPersons[0].AppleAdd += addApples;
                totalApples -= addApples;
                Console.WriteLine("分配数量:" + addApples);
            }
            persons.ForEach(x =>
            {
                Console.WriteLine(x.AppleAdd);//这就是你要的分配数据
                Console.WriteLine(x.AppleAdd + x.AppleNow);//这是最终分配时每个人的苹果总数量
                Console.WriteLine("##################");
            });
        }
再写个改善代码,可以减少分配次数
microsoftthx 2015-05-07
  • 打赏
  • 举报
回复
非常感谢,我第一次回复的时候还没有看到你的答案
  • 打赏
  • 举报
回复
public class Person
        {
            public int AppleNow { get; set; }
            public int AppleAdd { get; set; }
        }

        static void AllotApple(List<Person> persons, int totalApples)
        {
            while (totalApples > 0)
            {
                var person = persons.OrderBy(x => x.AppleNow + x.AppleAdd).First();
                person.AppleAdd++;
                totalApples--;
            }
            persons.ForEach(x =>
            {
                Console.WriteLine(x.AppleAdd);//这就是你要的分配数据
                Console.WriteLine(x.AppleAdd + x.AppleNow);//这是最终分配时每个人的苹果总数量
                Console.WriteLine("##################");
            });
        }
都这样子了还不会改下代码啊……
List<Person> persons = new List<Person>() { new Person() { AppleNow = 1 }, new Person() { AppleNow = 5 }, new Person() };
            AllotApple(persons, 20);
microsoftthx 2015-05-07
  • 打赏
  • 举报
回复
大致上要满足 情景1对应的输入参数为(fruitdistributecount:5,peoplecount:3,fruitorgcount:0,0,0) 输出结果为2,2,1 情景2对应的输入参数为(fruitdistributecount:1,peoplecount:3,fruitorgcount:1,3,0) 输出结果为0,0,1
  • 打赏
  • 举报
回复
public class Person
        {
            public int AppleCount { get; set; }
        }

        static void AllotApple(List<Person> persons, int totalApples)
        {
            while (totalApples > 0)
            {
                var person = persons.OrderBy(x => x.AppleCount).First();
                person.AppleCount++;
                totalApples--;
            }
            persons.ForEach(x =>
            {
                Console.WriteLine(x.AppleCount);
            });
        }
调用方法
List<Person> persons = new List<Person>() { new Person() { AppleCount = 1 }, new Person() { AppleCount = 5 }, new Person() };
            AllotApple(persons, 20);
微信小程序系统教程[初级阶段],微信小程序0基础学起,讲解微信小程序开发的基础知识。 微信小程序系统教程共有“微信小程序系统教程[初级阶段]”、“微信小程序系统教程[中级阶段]——核心技术”、“微信小程序系统教程[阶段]客服消息+微信支付+九宝电商系统”。 “微信小程序系统教程[阶段]全套课程”包含: 1.微信小程序系统教程[阶段]_客服消息 2.微信小程序系统教程[阶段]_微信支付 3.微信小程序系统教程[阶段]_九宝电商系统 学习“微信小程序系统教程[阶段]”要求有微信小程序的基础。建议先学习“微信小程序系统教程[初级阶段]”、“微信小程序系统教程[中级阶段]”,后在报名“微信小程序系统教程[阶段]”。 阶段讲解的客服消息,是针对小程序的。后台程序用接近底层的技术,没有使用三方技术。这样降低同学们学习成本。 微信支付,这部分课程很有难度,要求同学们认真听讲,有不会的技术问题可以请教老师。购买课程后请联系老师,提供单号,给你源程序。 九宝电商系统是一套十分适和学习、项目的课程。既可以系统的学习微信小程序相关知识,还可以修改后上线。 “微信小程序系统教程[中级阶段]——核心技术”重点讲解微信小程序事件、组件、API 微信小程序系统教程[初级阶段],微信小程序0基础学起,讲解微信小程序开发的基础知识。 购买课程的同学,可赠送就九宝老师编写的《微信小程序开发宝典》。 购课请咨询qq2326321088

110,539

社区成员

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

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

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