好的,这是我必须做的
作为 MCI(猛犸蛋糕公司)的员工,您的工作是制作超大的分层生日蛋糕。分层生日蛋糕是通过将小的圆形蛋糕层并将它们堆叠在一起而制成的。
为了完成你的工作,你站在一条大传送带前,而不同大小的层从你面前经过。当你看到你喜欢的,你可以把它从传送带上拿下来,加到你的蛋糕上。
只要您遵循以下规则,您可以根据需要在蛋糕中添加任意数量的层:
一旦将一层添加到您的蛋糕上,它就无法移动。(它弄乱了糖衣。)因此,层只能添加到蛋糕的顶部。
每一层只在你面前经过一次。你可以接受也可以离开。如果你吃了,你必须把它加到蛋糕的顶部。如果你离开它,它会沿着传送带移动,永远不会回来。
蛋糕中的每一层都必须至少与下面的层一样小。您不能在较小的图层上放置较大的图层。
您将被提前告知从传送带上下来的层的直径(以英寸为单位)。你的工作是使用这些层创建最高的蛋糕。例如,假设以下列表表示沿传送带向下的层的直径: 8 16 12 6 6 10 5
假设您将第一层(直径为 8 英寸)用于蛋糕。这意味着您可能不会采用第二层(因为您已经有一个 8 英寸大小的层,并且 16 英寸 > 8 英寸)。同样,你不能拿第三层,但你可以拿第四层(因为 6” < 8”)。
之后,你也可以取第五层(规则很简单,上面的层不能更大;它可以是相同的大小)。以这种方式进行,我们可以创建一个高度为 4 层的蛋糕: 8 6 6 5 但是,如果我们让第一层继续并从第二层开始,我们可以创建一个高度为 5 的蛋糕: 16 12 6 6 5
您的程序将处理多个输入集,每行一个。每行都以整数 N 开头,然后是 N 个正整数,表示蛋糕层的大小,按照它们到达传送带的顺序排列。N 永远是一个非负整数,0 N 100,000。每层的直径在 1 到 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();
}
}