我正在做家庭作业,但是遇到一个我不知道如何编写头脑中的内容的问题。输入的数字数量未知。
输入(示例):1 2 2 3 4 10 4 3 4 5 6 7 10 11 11 11 11 5 6 7 8 9 10
OUTPUT:输出必须是一行中最大数量的不同数字(下一行定义)。我无法更好地表达这句话,但您稍后可能会明白我的意思。我将不同数字的数量称为NODN
ROW定义:只要下一个输入不少于上一个,就认为是1行。在示例中,我们有4行:
1 2 2 3 4 10,
4,
3 4 5 6 7 10 11 11 11 11,
5 6 7 8 9 10
期望的输出将是7,因为第三行将具有最大数量的不同数字。
仅允许我使用Scanner,int和boolean类型。代码的第一部分(至少我相信是这样)在第一行中获取了NODN,第二部分从第二行获取了数字。我想做的是比较这两个数字,消除较低的数字,然后继续比较直到它到达输入的末尾。我不知道如何保持较高的NODN值并继续进行比较。谢谢。
代码:
while (sc.hasNextInt()) {
preLast = last;
last = sc.nextInt();
if (last > preLast) {
numberOfDiffNumbers++;
}
if (last < preLast) {
while (sc.hasNextInt()) {
preLast = last;
last = sc.nextInt();
if (last > preLast) {
numberOfDiffNumbers2++;
}
if (last < preLast) {
break;
}
}
}
答案 0 :(得分:1)
这里是使用4个$post->category_id
变量的想法:
int
答案 1 :(得分:0)
让我们考虑一下我们如何处理获得的每个新号码。也许我们还希望变量存储到目前为止最大的NODN,当前行中的数字数量以及最后读取的数字是什么。现在,当我们阅读每个数字时,以下任何一种可能性都是可能的:
我试图在不给出太多代码的情况下提供一些帮助,但是对于上述每种情况,请考虑如何修改这3个变量(迄今为止的最高NODN,当前行的长度,前一个数字)< / p>
答案 2 :(得分:0)
好的,您需要一个提示,因此,如果正确填写,我将向您展示可以肯定的代码。
Scanner sc = new Scanner(line);
int maxElts = 0;
int elts = 0;
int last = Integer.MIN_VALUE;
// iterate over all of the integers
while (sc.hasNextInt()) {
int x = sc.nextInt();
if (x > last) {
// TODO something to elts
} else if (x < last) {
// we're going to have to start over
if (elts > maxElts) {
// TODO but if the number of elts was higher ...
}
elts = ?; // TODO so how many elts are in the new row we've just found?
}
// we don't do anything for x == last - or should we?
last = x;
}
// OK, but
if (elts > maxElts) {
// TODO but if the number of elts was higher ...
}
System.out.println(maxElts);
一些要带走的东西:
x > last
那么肯定x < last
就不必测试。