一道C#竞赛题

来源:互联网 发布:excel 数据截断 编辑:程序博客网 时间:2024/06/05 05:01

题目的大致意思是:一些数字顺时针排成一个圈,最上面的是1,从1开始,隔一个数,移除一个数,顺时针一直移下去,直到最后剩下两个数,这两个数就是幸运数字。

例如1、2、3、4、5,开始如下图:


然后从1开始隔一个去掉一个数,如下图:


这个时候已经一轮了,但是剩余数字还大于2,所以继续去,这个时候4被去掉了,跳过数字5,就要去数字1了,如下图:


最后的Lucky Number就是3和5.

要求:

输入:一个数字n,即最大的数

输出:第一行显示各个被移除的数字,按被移除的顺序显示

第二行显示剩下的两个性欲数字。

我的代码如下:

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace LuckyNumber{    class Program    {        static void Main(string[] args)        {            int n = InputNumber();            IList<int> numberList = InitNumberList(n);            numberList = RemovedNumberOperation(numberList);            PrintLuckyNumber(numberList);            Console.ReadLine();        }        //输入数字        public static int InputNumber()        {            try            {                // ReSharper disable AssignNullToNotNullAttribute                return int.Parse(Console.ReadLine());                // ReSharper restore AssignNullToNotNullAttribute            }            catch (Exception)            {                throw;            }        }        //初始化数字列表        public static IList<int> InitNumberList(int n)        {            IList<int> numberList = new List<int>();            for (int i = 1; i <= n; i++)            {                numberList.Add(i);            }            return numberList;        }        //去掉数据操作        public static IList<int> RemovedNumberOperation(IList<int> numbers)        {            Boolean needRemove = false;            while (true)            {                //将numberList所有需要去掉的数字先都赋值为0                for (int i = 0; i < numbers.Count; i++)                {                    if (needRemove)                    {                        Console.Write(numbers[i] + " ");                        numbers[i] = 0;                        needRemove = false;                    }                    else                    {                        needRemove = true;                    }                }                //去除numberList所有的0                RemovedZeroFromNumberList(numbers);                if (numbers.Count == 3)                {                    if (needRemove)                    {                        Console.Write(numbers[0]);                        numbers.RemoveAt(0);                    }                      else                    {                        Console.Write(numbers[1]);                        numbers.RemoveAt(1);                    }                       return numbers;                }                if (numbers.Count == 2)                    return numbers;            }        }        public static IList<int> RemovedZeroFromNumberList(IList<int> numbers)        {            while (true)            {                if (numbers.Contains(0))                    numbers.Remove(0);                else                {                    return numbers;                }            }        }        //打印幸运数字        public static void PrintLuckyNumber(IList<int> numbers)        {            Console.WriteLine();            Console.WriteLine(numbers[0] + " " + numbers[1]);        }    }}


原创粉丝点击