2012-09-27 117 views
1

在我参加的一门课程中,我们最近不得不学习编程语言Scheme。我获得了所有的基础知识,这几乎是我们走过的所有事情。我只是无法学习以Scheme的不同方式思考。计划作业作业

我被赋予了任务,甚至不知道如何开始。我在这里坐了几个小时试图找出如何开始,但我有点难住。为了记录,我不是要求代码来解决这个问题,而是更多的想法让我走上正轨。

不管怎么说,这是分配的要点...

我们给出十个数字,代表了选民的选票名单。这些数字是-1,0或1.然后给出候选人名单清单,其中有名字,然后是与候选人投票相对应的十个数字。这些数字也是-1 0和1.

例如。

'(0 0 0 -1 -1 1 0 1 0 -1) 
'(Adams 0 1 -1 0 1 1 0 -1 -1 0 0) 

我们被要求实现一个函数调用best_candidates,将采取在数字列表(选民)和候选人名单列表。然后,我们必须将选民的选票与每位候选人的名单进行比较,并返回最常见选票的名单。

到目前为止,我已经想出了一些东西。我只是困惑于如何检查价值观并保留选民的姓名?我想我仍然停留在思考C/Java的过程中,这让它变得非常艰难。

任何建议,以帮助我开始?

+0

我不是计划专家,但这可能会有所帮助:http://docs.racket-lang.org/reference/for.html – Thousand

回答

1

我认为这是一个标准的搜索问题,您正在寻找具有最小差异(即“最常见”)的项目。

也就是说,给定项目X_0的列表,X_1,...,x_n,我想你想写一个计算对应的一组数字的分歧D_0的功能,D_1,...,d_n。一旦你可以计算出这些不一致数字,找出哪一个(或多个!)是最小的:这些对应最大一致性。

如果你能做到这一点,那么相应的x_i是你想收集的列表项。

上述描述的任何内容都不依赖于编程语言。如果您对另一种语言更加熟悉,请先使用该语言进行编码!你应该对问题有足够的信心和理解,以使额外的工作值得。至少,您可以使用另一个实现来测试您的Scheme实现,以确保您获得协议

+0

感谢您的回复。我已经在Java中编写了这个问题,对我来说相当简单。 你找到最小分歧数列表的方式是有趣的,而不是我尝试的方式。 我遇到的最大问题是,一旦我找出哪些列表是我需要的,我该如何将该候选人的姓名放入新列表并返回该列表? – user1704677

+0

在你的Java解决方案中,我猜你有一个循环。你能描述你在这个循环中做什么吗?我猜想其中的一件事是计算与选民共同的选票数量。我要做的第一件事就是发展一个可以让选民和候选人参加的职能,并返回他们共同拥有的选票数量(或者,如丹尼所说,不同的选票数量)。 –