30选15小小程序
15个日本人和15个美国人放在一起,数到9就踢出一个日本人,最后只剩15个美国人的算法
=================
class Program
{
static void Main(string[] args)
{
//一开始有30个人
int[] list = new int[30];
//初始化每个人的原始位置
for(int i = 0 ;i<30;i++)
{
list[i] = i;
}
// round_count 记录每次还剩下多少人 第一次 30人
int round_count = 30;
//记录最后一次是在哪个位置开始数
int last_index = 0;
for (int i = 0; i < 15; i++)
{
//更新队列人数
round_count = 30 - i;
//更新初始位置
last_index = (last_index + 8) % round_count;
//踢出日本人后 所有未被踢的人位置前移
for (int k = last_index; k < round_count - 1; k++)
{
//移动后改变初始索引
list[k] = list[k + 1];
}
}
//输出
for (int i = 0; i < 15; i++)
{
Console.WriteLine(list[i]);
}
Console.ReadKey();
}
=================
class Program
{
static void Main(string[] args)
{
//一开始有30个人
int[] list = new int[30];
//初始化每个人的原始位置
for(int i = 0 ;i<30;i++)
{
list[i] = i;
}
// round_count 记录每次还剩下多少人 第一次 30人
int round_count = 30;
//记录最后一次是在哪个位置开始数
int last_index = 0;
for (int i = 0; i < 15; i++)
{
//更新队列人数
round_count = 30 - i;
//更新初始位置
last_index = (last_index + 8) % round_count;
//踢出日本人后 所有未被踢的人位置前移
for (int k = last_index; k < round_count - 1; k++)
{
//移动后改变初始索引
list[k] = list[k + 1];
}
}
//输出
for (int i = 0; i < 15; i++)
{
Console.WriteLine(list[i]);
}
Console.ReadKey();
}

浙公网安备 33010602011771号