朋友的面试题:
一串由17个数字排列成一个圆环,现在从第1个位置开始计数,沿着圆环去掉被3整除的位置和数字,最后留下的是哪些数字?
最近上班有点时间,呵呵,来试试!
private void Test()
{
List<int> numbers = new List<int>();
for (int i = 1; i < 18; i++)
{
numbers.Add(i);
}
List<int> results = this.Calculate(numbers, 3);
Console.WriteLine("the remian is following numbers:");
foreach (int i in results)
{
Console.WriteLine(i.ToString());
}
}
private List<int> Calculate(List<int> numbers, int interval)
{
int remainAmount = numbers.Count % interval;
List<int> calculatedNumbers = new List<int>();
for (int i = 0; i < numbers.Count; i++)
{
if (i.Equals(numbers.Count - remainAmount-1))
{
for (int j = 0; j < remainAmount; j++)
{
int post = numbers.Count - 1 - j;
calculatedNumbers.Insert(0, numbers[post]);
}
break;
}
if ((i + 1) % interval != 0)
{
calculatedNumbers.Add(numbers[i]);
}
}
if (calculatedNumbers.Count / interval > 0)
{
return Calculate(calculatedNumbers, interval);
}
else
{
return calculatedNumbers;
}
}
最后结果是 剩下4和11。
大家有更好的算法么?