Професионална програма
Loading...
+ Нов въпрос
Somma avatar Somma 2 Точки

...задачата от учебника 03 Stop Number и поведението на Джъдж-а?!...

Здравейте, колеги! :)

Ще коментирам задачата от учебника „03. Stop Number“ и поведението на Джъдж-а, за да коментираме дали случайно съм открил бъг или логиката ми е грешна.

С две думи при мен се получи недоразбиране как Джъдж-а връща различни резултати за едно и също решени?! Както ще забележите съм добавил само една if(){} else{} конструкция за проверка (валидиране) на входните данни от конзолата и Джъдж-а гърми на два от резултатите:

 

Ето кодът с 80/100 точки, като връща:

Тест №4 (Грешен отговор)

Използвано време: 0.087 s

Използвана памет: 0.68 MB

… … …

Тест №7 (Грешен отговор)

Използвано време: 0.056 s

Използвана памет: 1.11 MB

 

import java.util.Scanner;

public class StopNumberWithWHILEcycle1 {

   public static void main (String[] args) {

      Scanner inputData = new Scanner(System.in);

         int n = Integer.parseInt(inputData.nextLine());

         int m = Integer.parseInt(inputData.nextLine());

         int s = Integer.parseInt(inputData.nextLine());

 

         if (0 <= n && n < m && m <= 10000 && n <= s && s <= m) {

            while (true) {

               if (m % 2 == 0 && m % 3 == 0) {

                  if (s == m) {

                     break;

                  } else if (m >= n) {

                     System.out.print( m + " ");

                  } else {

                     break;

                  }

               }

               m--;

            }

         } else {

            System.out.println("Я пак, че:   ");

            System.out.printf("0 <= %d(n) и n < %d(m) ?%n", n, m);

            System.out.printf("n <= %d(m) и m <= 10000 ?%n", m);

            System.out.printf("s >= %d(n) и s <= %d(m) ?%n", n, m);

         }

   }

}

 

Само премахването на if(){} else{} конструкцията за проверката и резултат е 100/100 точки?!?

 

import java.util.Scanner;<br> public class StopNumberWithWHILEcycle1 {

   public static void main (String[] args) {

      Scanner inputData = new Scanner(System.in);

      int n = Integer.parseInt(inputData.nextLine());

      int m = Integer.parseInt(inputData.nextLine());

      int s = Integer.parseInt(inputData.nextLine());

 

      while (true) {

         if (m % 2 == 0 && m % 3 == 0) {

            if (s == m) {

               break;

            } else if (m >= n) {

               System.out.print( m + " ");

            } else {

               break;

            }

         }

         m--;

      }

   }

}

 

Моля, коментирайте след като сте тествали кода и след като и при вас се получава такъв проблем. При мен впечатлението си остава, че е бъг и трябва Джъдж-а да се „пренастрой“, защото явно подава грешни данни, които са извън условието на задачата.

 

Успех: Somma!

 

Тагове:
0
Programming Basics with Java 06/08/2020 15:42:43
MANEKENA avatar MANEKENA 18 Точки

От кой учебник е тази задача ?

0
Somma avatar Somma 2 Точки

Здравей, Манекена! 

Учебника, който чета в момента е: https://java-book.softuni.bg/

Но аз ползвам PDF версията, която е на адрес https://github.com/SoftUni/Programming-Basics-Book-Java-BG/blob/master/resources/Programming-Basics-Java-v2017.pdf

Задачата в PDF-а е на 299 страница - : "Задача: спиращо число"!

А в уеб варианта е 4-тат задача от "Глава 7.2. По-сложни цикли – изпитни задачи"

Somma!

 

0
MANEKENA avatar MANEKENA 18 Точки
import java.util.Scanner;
// created by J.M.
public class StopNumber {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int n = Integer.parseInt(scan.nextLine());
        int m = Integer.parseInt(scan.nextLine());
        int s = Integer.parseInt(scan.nextLine());
        if (0 <= n && n < m && m <= 10000 && s <= m) {
            for (int i = m; i >= n; i--) {
                if (i % 2 == 0 && i % 3 == 0) {
                    if (s == i) {
                        break;
                    } else {
                        System.out.print(i + " ");
                    }
                }
            }
        }
    }
}

 

Така работи 100/100 и проблема в твоята проверка е (n <= s) ,но в случая с тази задача не ти искат валидиране на входните данни и няма нужда от тази if  проверка .Може да е печатна в грешка книгата това 

  • S - цяло число: N ≤ S ≤ M.   - или който е задавал параметрите в judge да не го е съобразил,за което си прав има бъг .
0