C#如何共享给定整数,LINQ中的任何人都可以共享余数

我有这个当前循环(未经测试的伪代码bc无法共享真实的循环,但是算法是相同的):

class People {
    public str name { get; set; };
    public int quantity { get; set; };



    People() {
      this.name = '';
      this.quantity = 0;
    }

    People(string name) {
      this.name = name;
      this.quantity = 0;
    }
}

Class ItemShare {
    items_remaining = True;
    q = 0; // Shared items counter

    public void share(int total_item_quantity, IEnumerable<People> people) {

        // If there's still items to be shared we begin to share them across people
        // until there are no items left
        while items_remaining{
            foreach People p in people {
                q++ // adds 1 to counter
                // If counter is less or equal to tota quantity then we can still share 
                // that item to current person
                if (q <= total_item_quantity) {             
                    p.quantity++  // Increase quantity by 1
                } else {
                    // Turn off the flag, because there are no more items to be shared
                    items_remaining= False                     
                    break; // Break loop
                }
            }
        // Print results
        foreach p in People {
            Console.WriteLine($"name:{p.name} quantity: p.quantity")
        }
    }
}

...

static void main() {
    List<People> people = getPeopleFromDB();
    total_item_quantity = getQuantityFromDB(); // It's just an integer variable from DB
    var c = new ItemShare();
    c.share(total_item_quantity, people);
}

如果人员列表包含3个人并且item_quantity为20,则结果:

  • 名称:person1数量:7
  • 名称:person2数量:7
  • 名称:person3数量:6

因为7 + 7 + 6 = 20

人员列表包含3个人且项目数量为1时的结果:

  • 名称:person1数量:1
  • 名称:person2数量:0
  • 名称:person3数量:0

因为总共只有1件

如果人员列表包含1个人并且item_quantity为5,则结果:

  • 名称:person1数量:5

如果人员列表包含x个人并且item_quantity为y的结果:

反正你懂这个意思...

如您所见,我没有问怎么做,我已经做到了。

我需要知道的是,如果可能的话,如何在LINQ中做到这一点。我知道如何平均分配,它只是一个部门:[total_item_quantity /人员列表中的人数],但是如果仔细看,应该考虑部门的其余部分。

谢谢。

评论