C#面试题:一群小孩围成一个圈的经典算法

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 00:19   536   0

一群小孩围成一个圈,从第一个开始报数,报到5的小孩退出圈,继续,求剩下的最后一个小孩的编号。

代码如下:

  1. public static int count = 0;//计数器
  2. public static int target = 5;//指定编号
  3. public static void Main (string[] args)
  4. {
  5. ArrayList all = new ArrayList ();//集合存储全部小孩
  6. ArrayList dela = new ArrayList ();//集合存储退出圈的小孩
  7. for (int i = 1; i <= 100; i++) {
  8. all.Add (i);//所有小孩添加到all集合中
  9. }
  10. while (true) {
  11. //如果只剩一个就退出
  12. if (all.Count == 1) {
  13. break;
  14. }
  15. foreach (var a in all) {
  16. count++;
  17. if (count == target) {
  18. count = 0;
  19. dela.Add (a);//退出圈的小孩添加到dela集合中
  20. }
  21. }
  22. foreach (var a in dela) {
  23. all.Remove (a);//退出圈的小孩从all集合中删除
  24. }
  25. foreach (var a in all) {
  26. Console.WriteLine (a);//最后剩下的小孩
  27. }
  28. }
  29. }

这是一道C#经典面试题。 大家如果有更好的方法,麻烦分享一下,大家一起进步。

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP