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

最近因为要面试,所以关注了一些上机题,发现有一个题挺有意思,很多“老鸟”可能都见过。

题目: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;
           }
       }
   }
 

输出结果:

cmd

大家也不妨来练一练,提提你的意见,^_^

posted @ 2009-08-27 00:36  Joyaspx  阅读(5473)  评论(42编辑  收藏  举报