C#面向对象编程
43个人围成一圈,报到7的出列,直到最后一个出列,如何用C#面向对象的思想写
追问:报到7的出列,例如17,27,37.......也是的。感谢你。我是这么做的,不知道对不对。
public void Do(List<Perpson> list)
{
if (list.Count > 0)
{
for (int i = 0; i < list.Count; i++)
{
string no = (++start).ToString();
if (no.Contains("7"))
{
MessageBox.Show("编号:" + list[i].Id + ",用户名:" + list[i].Name + "报" + no + " ,(有7)出列");
list.RemoveAt(i);
i--;
}
}
Do(list);
}
}
答案:using System;
using System.Collections.Generic;
using System.Text;namespace ConsoleApplication1
{
/// <summary>
/// 定义一个人类
/// </summary>
class Man
{
/// <summary>
/// 姓名
/// </summary>
string name;
/// <summary>
/// 获取或设置姓名
/// </summary>
public string Name
{
set { this.name = value; }
get { return name; }
}
/// <summary>
/// 构造函数
/// </summary>
/// <param name="name"></param>
public Man(string name)
{
this.name = name;
}
}
}
通过程序模拟该过程
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
//创建一个链表存放47个Man的对象
LinkedList<Man> mans = new LinkedList<Man>();
//模拟添加47个人
for (int i = 1; i <= 47; i++)
{
//创建一个Man类的对象 姓名用 "Man_"+i 初始化
Man man = new Man("Man_" + i);
//添加对象到链表的尾部
mans.AddLast(man);
}
// 设置第一个开始报数的人
LinkedListNode<Man> node = mans.First;
//只要剩余的人数大于1
while (mans.Count > 1)
{
//要删除的节点
LinkedListNode<Man> delNode = null;
// 循环将node指向下一个开始报数的人
for (int i = 0; i < 7; i++)
{
node = node.Next;
//如果到达链表的末尾 将node指向链表的开始节点
if (node == null)
node = mans.First;
//如果报数达到7 将要删除的节点 赋给变量 delNode
if (i == 5)
delNode = node;
}
mans.Remove(delNode);
Console.WriteLine(delNode.Value.Name+"出列!");
}
// 输出最后剩下的人
Console.WriteLine("最后剩下 " + node.Value.Name);
}
}
}
没明白你的意思..报到7的出列是什么意思? 从哪里还是报?
www.zhenjiandan.com 不明白就去真简单视频教程网看看啊
上一个:有没有一款比较成熟的网络通信框架,最好支持P2P的? - C#编程 -
下一个:socket 网络编程 C#