OK這裏蛋糕排序算法是我必須做的需要幫助來了在Java
由於MCI(猛獁蛋糕股份有限公司)的員工,這是你的工作,以創建非常大的 分層的生日蛋糕。分層的生日蛋糕是通過將小圓形蛋糕層和將它們堆疊在彼此之上而製成的。
爲了完成你的工作,你站在一個大型傳送帶 的前面,而不同大小的層穿過你的面前。當你看到一個你喜歡的人時,你可以把它從 傳送帶上取下,並將它添加到你的蛋糕上。
您可以儘可能多的層添加到你的蛋糕,你想, 只要你遵循下列規則:
一旦一個圖層添加到你的蛋糕就不能移動。 (它會攪起結冰。)因此,圖層 只能添加到蛋糕的頂部。
每層僅在您面前經過一次。你可以拿走它或者離開它。如果你拿它,你 必須將它添加到你的蛋糕的頂部。如果離開它,它將沿傳送帶向下移動, 永遠不會返回。
蛋糕中的每一層必須至少與下面的圖層一樣小。您不能將較大的圖層放在較小的圖層上。
您將被預先告知輸送帶下方各層的直徑(以英寸爲單位)。 你的工作是使用這些圖層創建最高的蛋糕。 例如,假設以下列表代表傳送帶上傳來的圖層的直徑:8 16 12 6 6 10 5
假設您爲蛋糕拍了第一層(直徑爲8「)。這意味着你可能不需要第二層(因爲你已經有一個大小爲8「和16」> 8「的層)。同樣,你不能 採取第三層,但你可以採取第四層(自6「< 8」)。
接下來,你可以將 也拿到第五層(規則是簡單的說,頂層不能更大;它可以是相同的大小) 大小。以這種方式進行,我們可以創建一個高度爲4層的蛋糕:但是,如果我們讓第一層繼續並從第二層開始,我們可以創建一個高度爲012的蛋糕。 5:16 12 6 6 5
您的程序將處理多個輸入集,每行一個。每行將以整數N, 開頭,接着是N個正整數,表示蛋糕層的大小,其順序是:到達傳送帶上的次數爲 。 N將始終是一個非負整數,0 N 100,000。每層 將具有1和100,000之間的直徑。一條線,其中N = 0標誌着 輸入結束
Sample Input
7 8 16 12 6 6 10 5
10 45 25 40 38 20 10 32 25 18 30
10 10 9 8 7 6 5 4 3 2 1
0
Sample Output
5
6
10
問題:找到蛋糕的最高層
這是我到目前爲止寫:
import java.io.*;
import java.util.*;
public class cake
{
private static String line;
private static ArrayList storage = new ArrayList();
private static Integer highestStack = 0;
public static void main(String [] args)throws IOException
{
FileReader fin = new FileReader("cake.in");
BufferedReader infile = new BufferedReader(fin);
FileWriter fout = new FileWriter("cake.out");
BufferedWriter outfile = new BufferedWriter(fout);
line = infile.readLine();
do
{
String[] temp = line.split(" ");
String number;
for(int j = temp.length-1; j!=0; j--)
{
if(Integer.parseInt(temp[j]) <= Integer.parseInt(temp[j-1]))
{
highestStack++;
}
}
storage.add(highestStack);
// Collections.sort(storage);
line = infile.readLine();
}while(!line.equals("0"));
infile.close();
outfile.close();
}
}
看起來像你解決這個問題(雖然我沒有看到你輸出的答案)。你的問題是什麼? – DaveC 2010-12-12 19:46:45
我沒有完成問題,這只是我寫的。問題是我怎麼拿出最高的蛋糕堆。 – 2010-12-12 19:48:00
@Steffan Harris:這個課程是關於理解*動態編程*的內容嗎?如果是這樣,忽略所有提示Java'ish解決方案的答案,他們錯過了* dynamic programming *標籤。 – SyntaxT3rr0r 2010-12-12 21:10:32