【C#】找位置问题
- 1 题目描述:找位置问题
- 2 输入描述
- 3 输出描述
- 4 样例输入
- 5 样例输出
- 6 源码详解
- 7 实现效果
1 题目描述:找位置问题
n 个人围成一圈, 并依次编号1~n。从编号为1 的人开始,按顺时针方向每隔一人选出一个,剩下的人重新围成一圈,如此循环直到剩下两人,这剩下的两人就是幸运儿。如果你想成为最后两个幸运儿,请问开始时应该站在什么位置?(设3<=n<=50)
2 输入描述
开始时的人数n
3 输出描述
第1 行是选出顺序,第2 行是两名幸运儿的开始位置(按升序排列),位置编号之间用一个空格分开。
4 样例输入
12
5 样例输出
2 4 6 8 10 12 3 7 11 5
1 9
6 源码详解
using System;
namespace Csharp2_3
{
class Program
{
static void Main(string[] args)
{
int n;
string n_str;
Console.Write("请输入人数:");
n_str = Console.ReadLine();
n = Convert.ToInt32(n_str);
int[] number = new int[n];
for (int i = 0; i < number.Length; i++)
{
number[i] = i + 1;
}
while (number.Length > 2)
{
int[] number_out = new int[(number.Length + 1) / 2];
int[] number_save = new int[(number.Length + 1) / 2];
int index_out = 0, index_save = 0;
for (int i = 0; i < number.Length; i++)
{
if (i % 2 == 0)
{
number_save[index_save] = number[i];
index_save++;
}
else
{
number_out[index_out] = number[i];
index_out++;
}
}
for (int i = 0; i < number_out.Length; i++)
{
if (number_out[i] != 0)
{
Console.Write(number_out[i] + " ");
}
}
number = number_save;
}
Console.WriteLine();
for (int i = 0; i < number.Length; i++)
{
Console.Write(number[i] + " ");
}
Console.ReadLine();
}
}
}