【发布时间】:2010-03-18 00:38:04
【问题描述】:
我很难弄清楚这个问题背后的逻辑。我已经开发了其他所有东西,但我真的可以使用一些帮助,任何形式的帮助,我坚持的部分。
背景故事:
*一群演员围成一圈等待。他们“数 关”的不同数量。最后几个试镜 被认为最有可能获得 零件和成为明星。
演员不是有名字的,而是被识别出来的 按数字。表中的“试听顺序”告诉我们, 从左到右阅读,演员的“名字” 将按照他们将执行的顺序进行试听。*
样本输出:
等等,一直到 10 个。
到目前为止我所拥有的:
using System;
using System.Collections;
using System.Text;
namespace The_Last_Survivor
{
class Program
{
static void Main(string[] args)
{
//Declare Variables
int NumOfActors = 0;
System.DateTime dt = System.DateTime.Now;
int interval = 3;
ArrayList Ring = new ArrayList(10);
//Header
Console.Out.WriteLine("Actors\tNumber\tOrder");
//Add Actors
for (int x = 1; x < 11; x++)
{
NumOfActors++;
Ring.Insert((x - 1), new Actor(x));
foreach (Actor i in Ring)
{
Console.Out.WriteLine("{0}\t{1}\t{2}", NumOfActors, i, i.Order(interval, x));
}
Console.Out.WriteLine("\n");
}
Console.In.Read();
}
public class Actor
{
//Variables
protected int Number;
//Constructor
public Actor(int num)
{
Number = num;
}
//Order in circle
public string Order(int inter, int num)
{
//Variable
string result = "";
ArrayList myArray = new ArrayList(num);
//Filling Array
for (int i = 0; i < num; i++)
myArray.Add(i + 1);
//Formula
foreach (int element in myArray)
{
if (element == inter)
{
result += String.Format(" {0}", element);
myArray.RemoveAt(element);
}
}
return result;
}
//String override
public override string ToString()
{
return String.Format("{0}", Number);
}
}
}
}
我坚持的部分是进行一些数学运算: alt text http://content.screencast.com/users/SidSinister/folders/Jing/media/0d178ed4-64bd-468c-acc3-872fa8d8d541/2010-03-17_2035.png
谁能提供一些指导和/或示例代码?
进展一
新代码
public string Order(int inter, int num) { //多变的 字符串结果 = ""; 整数位置 = 0; ArrayList myArray = new ArrayList();
//Filling Array
for (int i = 0; i < num + 1; i++)
myArray.Add(i+1);
while (myArray.Count > 1)
{
pos = (pos + inter) % myArray.Count;
result += (myArray[pos] + " ");
myArray.RemoveAt(pos);
}
result += (myArray[0]);
myArray.Clear();
return result;
【问题讨论】:
-
听起来像是功课!我记得在课堂上用不同的措辞做这个确切的问题。我不记得解决方案,但它不是太难。坚持下去!
-
基本上我只需要了解如何循环一个数组的索引并从中减去元素。
-
这通常被称为约瑟夫斯问题...