一道C#竞赛题

题目的大致意思是:一些数字顺时针排成一个圈,最上面的是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]); } } }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值