在某些分数下,代码“行为异常”并以错误的结果结尾。例如,这是在这组分数上发生的:
5、4、3、2、5
只要数字减少一切都很好,但是在最后一步,如果数字再次增加,代码将无法返回正确的答案。
我们将不胜感激任何帮助和解释。
任务 给定一组分数,如果每个分数等于或低于其前面的分数,则打印“ true”。 输入格式 第一行包含一个整数n,表示数组的大小。随后的n行中的每一行都包含一个整数,该整数表示数组在下一个位置的值。 约束 数组的长度将为2或更大。 输出 只是单词“ true”或“ false”。
输入 5 4 3 2 1 1 预期输出 true 输出 true 输入 5 4 3 2 1 2 预期输出否输出正确
我已经尝试过多种解决方案,但是我绝对是新手,所有尝试都失败了。
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int[] array3 = new int[a];
int m; int j = 1; int ctn=-1;
//System.out.println("ctn= -1");
for(int i=0; i<array3.length; i++){
m = sc.nextInt();
while(j<array3.length && array3[j] < m){
j++;
}
if(j == array3.length){
array3[i] = m;
ctn++;
j = 0;
//System.out.println("ctn+1 m>j " + ctn);
}else{
array3[i] = m;
j = 0;
//System.out.println("ctn m<=j " + ctn);
}
}
if(ctn != 0){
System.out.println("false");
}else{
System.out.println("true");
}
}
}
答案 0 :(得分:1)
编辑: 我不确定是否要让每个分数等于或低于所有分数(或先于即时分数)。
如果它只是前面的即时分数,那么将执行一个简单的循环,通过查找来检查先前的值,否则请参阅下文。
最简单的方法是跟踪您到目前为止遇到的最低“得分”,并将其用于检查条件。
Network
答案 1 :(得分:0)
尝试以下代码:
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int[] array3 = new int[a];
String res = "true" ;
for(int i=0; i<array3.length; i++){
array3[i]= sc.nextInt();
if(i>0 && array3[i-1] < array3[i]) res = "false";
}
System.out.print(res);
此外,如果您不想在违反条件后再输入任何值,则可以在break
内添加if
。