C# 有十个人每个人有五个号,现在进行分组,每组12可以容纳12个号,但是每个人的号i必须在同一个分组,不能跨组,示例demo
时间: 2024-09-26 16:07:12 浏览: 21
在C#中,为了满足这个需求,你可以创建一个数据结构来存储这十个人员及其五个号码,然后通过循环和条件判断将它们分配到不同的组。这里我们假设使用列表(List<T>)来存储人员和号码,然后遍历每个人员,检查剩余的可用组是否能接纳他的所有号码。如果没有足够的空间,就创建一个新的组。
以下是一个简单的示例:
```csharp
using System;
using System.Collections.Generic;
class Person
{
public int Id { get; set; }
public List<int> Numbers { get; set; }
public Person(int id, List<int> numbers)
{
Id = id;
Numbers = numbers;
}
}
class Group
{
public List<Person> Members { get; set; } = new List<Person>();
public bool CanFit(Person person) => Members.Count + person.Numbers.Count <= 12;
}
class Program
{
static void Main(string[] args)
{
// 创建人员及号码
List<Person> people = new List<Person>
{
new Person(1, new List<int> {1, 2, 3, 4, 5}),
new Person(2, new List<int> {6, 7, 8, 9, 10}),
... // 其他九人类似
};
List<Group> groups = new List<Group>();
foreach (var person in people)
{
// 遍历每个人都尝试加入现有的组
foreach (Group group in groups)
{
if (group.CanFit(person))
{
group.Members.Add(person);
break;
}
}
// 如果所有的组都满了,创建新的组
if (groups.Count == groups.Capacity && !groups.Last().CanFit(person))
{
groups.Add(new Group());
}
}
Console.WriteLine("分组结果:");
foreach (Group group in groups)
{
Console.WriteLine($"组 {groups.IndexOf(group) + 1}:");
foreach (Person p in group.Members)
{
Console.WriteLine($"- 人员 {p.Id} 号码: {string.Join(", ", p.Numbers)}");
}
}
}
}
```
这个示例首先创建了人员和他们的号码,然后创建一个空的组列表。接着,它会遍历每一个人,并尝试将其放入一个能够接受的组。如果所有当前组都满,就会创建一个新组。最后,打印出每个组及其成员信息。
阅读全文