关于一道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

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

转载于:https://www.cnblogs.com/joyaspx/archive/2009/08/27/1554753.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值