Что не так с моим кодом 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");
    }
}
Другие вопросы по тегам