Что не так с моим кодом Java, он не очищает все тесты?
Хотя проблема проста. Вот:
Постановка задачи
Безопасность пароля - очень важная тема сегодня. Здесь мы определяем систему паролей как набор требований, которым должен соответствовать действительный пароль в этой системе. В каждой такой системе каждый действительный пароль состоит только из цифр [0−9]. Кроме того, для каждой такой системы есть два требования, которым должен соответствовать действительный пароль:
Минимальная длина действующего пароля.
Максимальная длина действительного пароля.
Мы говорим, что система паролей безопасна тогда и только тогда, когда в этой системе имеется более миллиона (106) различных возможных паролей. Ваша задача, как эксперта по безопасности, состоит в том, чтобы определить для данной системы паролей, является ли она безопасной.
Заметка
Повторение цифр допускается. То есть 111 является действительным паролем длиной 3.
Ведущие 0 допускаются. То есть 001 и 000 действительный пароль длиной 3.
Вы должны учитывать сумму всех паролей, длина которых лежит в диапазоне минимального и максимального значения. То есть, если минимальная длина равна 3, а максимальная длина равна 5, вам нужно найти общее количество паролей, длина которых равна 3, 4 или 5.
Формат ввода
В первой строке есть одно целое число T, обозначающее количество тестов.
Т-линии следуют.
I-я строка обозначает один тестовый случай и описывает данную систему паролей. Он состоит из двух целых чисел m и M, обозначающих минимальную длину пароля и максимальную длину пароля в этой системе.
Ограничения
1≤T≤100
1≤m≤M≤10
Выходной формат
Вывести ровно T строк. В i-м из них выведите "YES" (без кавычек), если система i-го пароля безопасна, в противном случае выведите "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 до 10^M и суммировать их. Но если M >= 6, нам не нужно вычислять напрямую, мы можем сказать "ДА", а если M <= 5, мы можем сказать "НЕТ" напрямую.
Вот мой код:-
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");
}
}
}
}
}
И код не в состоянии очистить все тесты. Увы!
2 ответа
В заявлении о проблеме написано "ДА", "если и только если в этой системе более миллиона возможных паролей".
Похоже, ваш код проверяет больше или равно 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");
}
}