C#ConcurrentQueue队列在分苹果中的简单应用

1、同事发来了小学生家庭作业。用编程来实现苹果的分配。

一共有N个苹果,M个篮子,最大程度的均分苹果

要求:
1:只能最后一个篮子出现奇数,其他篮子必须是偶数
2:最后一个篮子的苹果数量,不能与前一篮子相差超过2个

比如77个苹果,5个篮子:分配方案  16 16 16 14 15 
比如350个苹果,18个篮子的分配方案是: 13个篮子放20个,5个篮子放 18个

2、经过考虑后,决定用队列来实现。出队的首元素自动加入队列尾部,实现循环队列的功能。同时,要实现如果有奇数一定放在最后,那就要所有元素的循环次数是相同的,把余数加在最后一位就可以了。

3、程序编码如下:

using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApp2
{
    class Program
    {
        internal class Basket
        {
            public int BasketId { get; set; }
            public int AppleCount { get; set; }
            public override string ToString()
            {
                return $"篮子{BasketId}:苹果{AppleCount}个;";
            }
        }

        static void Main(string[] args)
        {
            Console.WriteLine("小朋友拿好篮子排好队,老师开始分苹果了....");
            int basketNumber = 5;
            int appleNumber = 77;

            List<int> apples = Enumerable.Range(1, appleNumber / 2).Select(x => 2).ToList();
            int number = apples.Count % basketNumber;
            Enumerable.Range(1, basketNumber-number-1).ToList().ForEach(p => { apples.Add(0); });
            apples.Add(appleNumber % 2);
            List<Basket> baskets = new List<Basket>();
            Enumerable.Range(1, basketNumber).ToList().ForEach(x => baskets.Add(new Basket() { BasketId = x, AppleCount = 0 }));
            ConcurrentQueue<Basket> queue = new ConcurrentQueue<Basket>(baskets);
            apples.ForEach(p =>
           {
               queue.TryDequeue(out Basket x);
               x.AppleCount += p;
               queue.Enqueue(x);
           });
            baskets = baskets.OrderBy(p => p.BasketId).ToList();
            string result = string.Empty;
            baskets.ForEach(p => { result += p.ToString(); });
            Console.WriteLine($"一共{appleNumber}个苹果,{basketNumber}个小朋友。\r\n分配结果如下:\r\n{result}");
            Console.ReadKey();
        }
    }
}

4、程序运行结果如下:

小朋友拿好篮子排好队,老师开始分苹果了....
一共77个苹果,5个小朋友。
分配结果如下:
篮子1:苹果16个;篮子2:苹果16个;篮子3:苹果16个;篮子4:苹果14个;篮子5:苹果15个;

posted @ 2020-06-04 12:07  hzwanglw  阅读(361)  评论(0)    收藏  举报