不错呦!smile@林凯西,确保“准备文件”中的几个文件都有安装,S...您好,看了您这篇帖子觉得很有帮助。但是有个问题想请...我的修改过了怎么还被恶意注册呢 @jjjjiiii 用PJ快9年了,主要是A...PJ3啊,貌似很少有人用PJ了,现在不是WP就是z...@332347365,我当时接入时错误码没有-10...楼主,ChkValue值应为-103是什么意思呢?...大哥 你最近能看到我发的信息,请跟我联系,我有个制...
面试题:最后一人开始时的位置?
编辑:dnawo 日期:2010-06-05
题目
50人排一队,从1开始报数,3倍数的退出,到尾后头的人接着报(如第2轮时第1个人报51),问最后1人开始时的位置?
代码
C#代码1(int[]版,退出的保留其位置):
C#代码2(List<int>版,退出的不保留位置,后边的前移):
50人排一队,从1开始报数,3倍数的退出,到尾后头的人接着报(如第2轮时第1个人报51),问最后1人开始时的位置?
代码
C#代码1(int[]版,退出的保留其位置):
复制内容到剪贴板
程序代码

using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
//条件
int number = 50;
int interval = 3;
int[] ids = new int[number];
for (int i = 0; i < number; i++) ids[i] = 1;
//辅助变量
int balance = number;
int j = 0;
//报数,3倍数退出
while (balance != 1)
{
for (int k = 0; k < number; k++)
{
if (ids[k] == 0)
continue;
if (++j % interval == 0)
{
ids[k] = 0;
balance--;
if (balance == 1) break;
}
}
}
//原来位置查询
for (int i = 0; i < number; i++)
{
if (ids[i] == 1)
{
Console.WriteLine("最后1人开始时的位置为:{0}", i + 1); //11
break;
}
}
Console.Read();
}
}
}
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
//条件
int number = 50;
int interval = 3;
int[] ids = new int[number];
for (int i = 0; i < number; i++) ids[i] = 1;
//辅助变量
int balance = number;
int j = 0;
//报数,3倍数退出
while (balance != 1)
{
for (int k = 0; k < number; k++)
{
if (ids[k] == 0)
continue;
if (++j % interval == 0)
{
ids[k] = 0;
balance--;
if (balance == 1) break;
}
}
}
//原来位置查询
for (int i = 0; i < number; i++)
{
if (ids[i] == 1)
{
Console.WriteLine("最后1人开始时的位置为:{0}", i + 1); //11
break;
}
}
Console.Read();
}
}
}
C#代码2(List<int>版,退出的不保留位置,后边的前移):
复制内容到剪贴板
程序代码

using System;
using System.Collections.Generic;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
//条件
int number = 50;
int interval = 3;
List<int> ids = new List<int>();
for (int i = 0; i < number; i++) ids.Add(i + 1);
//辅助变量
int balance = ids.Count;
int j = balance;
//报数,3倍数退出
while (balance != 1)
{
for (int k = balance - 1; k >= 0; k--)
{
if ((j - (balance - k - 1)) % interval == 0)
ids.RemoveAt(k);
}
balance = ids.Count;
j += balance;
}
//原来位置查询
Console.WriteLine("最后1人开始时的位置为:{0}", ids[0]); //11
Console.Read();
}
}
}
using System.Collections.Generic;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
//条件
int number = 50;
int interval = 3;
List<int> ids = new List<int>();
for (int i = 0; i < number; i++) ids.Add(i + 1);
//辅助变量
int balance = ids.Count;
int j = balance;
//报数,3倍数退出
while (balance != 1)
{
for (int k = balance - 1; k >= 0; k--)
{
if ((j - (balance - k - 1)) % interval == 0)
ids.RemoveAt(k);
}
balance = ids.Count;
j += balance;
}
//原来位置查询
Console.WriteLine("最后1人开始时的位置为:{0}", ids[0]); //11
Console.Read();
}
}
}
评论: 0 | 引用: 0 | 查看次数: 3317
发表评论
请登录后再发表评论!