我的 java 代码有什么问题,它没有清除所有测试?
What is the wrong with my java code, its not clearing all the tests?
虽然问题很简单。在这里:
问题陈述
密码安全是当今一个非常重要的话题。我们在这里将密码系统定义为一组要求,该系统中的有效密码必须满足这些要求。在每个这样的系统中,每个有效密码仅由数字 [0-9] 组成。此外,对于每个此类系统,有效密码必须满足两个要求:
有效密码的最短长度。
有效密码的最大长度。
我们说密码系统是安全的当且仅当该系统中有超过一百万 (106) 个不同的可能密码。作为安全专家,您的任务是确定给定的密码系统是否安全。
备注
允许重复数字。即111是长度为3的有效密码。
允许前导 0。即 001 和 000 是长度为 3 的有效密码。
您必须考虑长度在最小值和最大值范围内的所有密码的总和。那是
如果最小长度为 3,最大长度为 5,则必须找到
长度为 3、4 或 5 的密码总数。
输入格式
第一行有一个整数T,表示测试用例的数量。
接下来是 T 行。
第 i 行表示单个测试用例并描述给定的密码系统。由两个整数m和M组成,分别表示本系统密码的最小长度和最大长度。
约束条件
1≤T≤100
1≤m≤M≤10
输出格式
精确打印 T 行。如果第 i 个密码系统是安全的,则在第 i 个中打印 "YES"(不带引号),否则打印 "NO"(不带引号)。
样本输入
2
5 5
7 8
示例输出
NO
YES
说明
Sample Case #00
All valid passwords have length 5, hence there are exactly 100000 different passwords; this system in insecure, because we need more than a million different passwords for a system to be secure.
Sample Case #01
We are allowed to have passwords of length 7 or 8 and since there are more than a million different such passwords, this system is secure.
我的理解:由于允许重复,我们必须计算 10^m 到 10^M 并将它们相加。但是如果 M >= 6 我们不必直接计算我们可以说 "YES" 并且如果 M <= 5 我们可以直接说 "NO" 。
这是我的代码:-
import java.io.*;
import java.util.*;
public class Solution {
public static void main(String[] args) {
/* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
Scanner scan = new Scanner(System.in);
int cases = scan.nextInt();
int minl = 0, maxl = 0;
int sum = 0;
for(int i = 0; i < cases; i++){
minl = 0;
maxl = 0;
sum = 0;
minl = scan.nextInt();
maxl = scan.nextInt();
if(maxl >= 6){
System.out.println("YES");
}else if(maxl <= 5){
System.out.println("NO");
}else if(minl >= 6){
System.out.println("YES");
}else if((maxl - minl) >= 6){
System.out.println("YES");
}else{
for(double k = minl; k <= maxl; k++){
sum += Math.pow(10.0 , k);
}
if(sum >= 1000000){
System.out.println("YES" );
}else{
System.out.println("NO");
}
}
}
}
}
并且代码未能清除所有测试。唉!
问题陈述说要打印 YES "if and only if there are more than one million different possible passwords in this system."
您的代码似乎正在检查大于或等于 if(maxl >= 6)
。
最简单的解决方案是:
for(int i = 0; i < cases; i++){
minl = 0;
maxl = 0;
minl = scan.nextInt();
maxl = scan.nextInt();
if(maxl > 6 || (maxl == 6 && minl <6)){
System.out.println("YES");
}else {
System.out.println("NO");
}
}
虽然问题很简单。在这里:
问题陈述
密码安全是当今一个非常重要的话题。我们在这里将密码系统定义为一组要求,该系统中的有效密码必须满足这些要求。在每个这样的系统中,每个有效密码仅由数字 [0-9] 组成。此外,对于每个此类系统,有效密码必须满足两个要求:
有效密码的最短长度。
有效密码的最大长度。
我们说密码系统是安全的当且仅当该系统中有超过一百万 (106) 个不同的可能密码。作为安全专家,您的任务是确定给定的密码系统是否安全。
备注
允许重复数字。即111是长度为3的有效密码。
允许前导 0。即 001 和 000 是长度为 3 的有效密码。
您必须考虑长度在最小值和最大值范围内的所有密码的总和。那是 如果最小长度为 3,最大长度为 5,则必须找到 长度为 3、4 或 5 的密码总数。
输入格式
第一行有一个整数T,表示测试用例的数量。
接下来是 T 行。
第 i 行表示单个测试用例并描述给定的密码系统。由两个整数m和M组成,分别表示本系统密码的最小长度和最大长度。
约束条件
1≤T≤100
1≤m≤M≤10
输出格式
精确打印 T 行。如果第 i 个密码系统是安全的,则在第 i 个中打印 "YES"(不带引号),否则打印 "NO"(不带引号)。
样本输入
2
5 5
7 8
示例输出
NO
YES
说明
Sample Case #00
All valid passwords have length 5, hence there are exactly 100000 different passwords; this system in insecure, because we need more than a million different passwords for a system to be secure.
Sample Case #01
We are allowed to have passwords of length 7 or 8 and since there are more than a million different such passwords, this system is secure.
我的理解:由于允许重复,我们必须计算 10^m 到 10^M 并将它们相加。但是如果 M >= 6 我们不必直接计算我们可以说 "YES" 并且如果 M <= 5 我们可以直接说 "NO" 。
这是我的代码:-
import java.io.*;
import java.util.*;
public class Solution {
public static void main(String[] args) {
/* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
Scanner scan = new Scanner(System.in);
int cases = scan.nextInt();
int minl = 0, maxl = 0;
int sum = 0;
for(int i = 0; i < cases; i++){
minl = 0;
maxl = 0;
sum = 0;
minl = scan.nextInt();
maxl = scan.nextInt();
if(maxl >= 6){
System.out.println("YES");
}else if(maxl <= 5){
System.out.println("NO");
}else if(minl >= 6){
System.out.println("YES");
}else if((maxl - minl) >= 6){
System.out.println("YES");
}else{
for(double k = minl; k <= maxl; k++){
sum += Math.pow(10.0 , k);
}
if(sum >= 1000000){
System.out.println("YES" );
}else{
System.out.println("NO");
}
}
}
}
}
并且代码未能清除所有测试。唉!
问题陈述说要打印 YES "if and only if there are more than one million different possible passwords in this system."
您的代码似乎正在检查大于或等于 if(maxl >= 6)
。
最简单的解决方案是:
for(int i = 0; i < cases; i++){
minl = 0;
maxl = 0;
minl = scan.nextInt();
maxl = scan.nextInt();
if(maxl > 6 || (maxl == 6 && minl <6)){
System.out.println("YES");
}else {
System.out.println("NO");
}
}