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