2012-09-27 151 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解決方案中,我猜你有一個循環。你能描述你在這個循環中做什麼嗎?我猜想其中的一件事是計算與選民共同的選票數量。我要做的第一件事就是發展一個可以讓選民和候選人蔘加的職能,並返回他們共同擁有的選票數量(或者,如丹尼所說,不同的選票數量)。 –