您的位置:首页 > 编程语言 > C#

关于一道C#上机题的一点想法

2009-08-27 00:36 260 查看
最近因为要面试,所以关注了一些上机题,发现有一个题挺有意思,很多“老鸟”可能都见过。

题目:17个人围成一圈,从第一个人开始报数,报到3的退出,一直到剩下最后一个人,用面向对象的思想去做这道题。

我是比较懒的,所以先搜了一下答案,在园子里面只找到这位仁兄的文章 泛型委托,看完之后总觉得不妥,里面没有体现“面向对象”这个重要思想,于是我自己也来做一做这道题。

 

public class person
{
public person Prev { get; set; }
public person Next { get; set; }
public int Val { get; set; }

public person() { }
public person(person pre,person next,int val) {
Prev = pre;
Next = next;
Val = val;
}
}
class Program
{
static void Main(string[] args)
{

var rootperson = new person();
rootperson.Val = 1;

//初始化数据
person temp = rootperson;
for (int i = 2; i <= 17; i++)
{
var p = new person(temp, null, i);
temp.Next = p;
temp = p;
}
temp.Next = rootperson;
rootperson.Prev = temp;//最后一个与第一个连接上

//输出
int j = 1;
person start = rootperson;
while (start.Next != null)
{
if (j % 3 == 0) remove(start);
start = start.Next;
j++;
}

Console.ReadLine();
}
public static void remove(person p)//输出并退出链环
{
Console.WriteLine(p.Val);
if (p.Prev != p.Next)
{
p.Prev.Next = p.Next;
p.Next.Prev = p.Prev;
}
else//只剩下两人的时候
{
p.Prev.Next = null;
p.Prev.Prev = null;
}
}
}


 


输出结果:



大家也不妨来练一练,提提你的意见,^_^
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: