Упражнение «недобросовестное вычитание» - PullRequest
0 голосов
/ 19 сентября 2019

Я пытаюсь решить эту проблему на коде шеф-повара .Я цитирую это здесь:

Вход содержит два целых числа A и B, так что 1 ≤ B

Выведите неверный ответ AB.Ваш ответ должен быть положительным целым числом, содержащим такое же количество цифр, что и правильный ответ, и ровно одна цифра должна отличаться от правильного ответа.Ведущие нули не допускаются.Если есть несколько ответов, удовлетворяющих вышеперечисленным условиям, подойдет любой.

Например, при вводе 5858 1234 вывод равен 1624.(Правильный ответ 5858-1234 - 4624. Так, например, 2624, 4324, 4623, 4604 и 4629 будут приняты, но 0624, 624, 5858, 4624 и 04624 будут отклонены.)

Я получаю неправильный ответ на проблему с кодом, даже если вывод правильный

import java.util.*;
import java.lang.*;

/* Name of the class has to be "Main" only if the class is public. */
class Code
{
    public static void main (String[] args) throws java.lang.Exception
    {
        try{
             Scanner scan = new Scanner(System.in);
             int A = scan.next Int();
             int B = scan.next Int();
             int C;
             if(A>B){
                  C = A-B;
             }else{
                  C = B-A;
             }
             int result = 0;
             int rem = 0;
             int number = 0;
             System.out.print(C);   prints out the initial output
             rem = C%10;
             C = C/10;
             rem = 1;
             number = C*10 + rem;

             **System.out.print(number);** //prints out the result

        }catch(Exception e){

        }
    }
}

Вывод правильный, но опять же шеф-повар кода не принимает это решение.

1 Ответ

0 голосов
/ 19 сентября 2019

Я не могу сказать вам, почему «шеф-повар кода» не принимает его, потому что я не знаю этого сайта, поэтому я не знаю, как он компилирует код, , но Я могу сказать вам, почему вашВ общем, код неправильный, когда я компилирую его в обычную среду IDE, которая является более полезной информацией, поверьте мне.Я предлагаю вам написать эти упражнения в IDE (как я сделал), потому что в этом случае ваше оригинальное решение вообще не компилируется.

Вот проблемы с вашим кодом:

  • Метод Scanner.nextInt(), а не Scanner.next_Int();
  • Было несколько строк, которые не были должным образом прокомментированы;
  • Вы напечатали правильное и бесполезное неверное решение, не разделяя их, поэтомувозможно, шеф-повар прочитал это как одно число.Замените System.out.print на System.out.println
  • О функции try-catch ...
    • Вам не нужно объявлять, что ваш основной метод - бросать java.lang.Исключение;
    • Никогда не отлавливайте универсальный суперкласс java.lang.Exception.Просто, никогда.
    • Если вы ловите исключение, никогда не оставляйте тело улова пустым.Это бессмысленно.
    • Сочетание «catch Exception + empty catch body», возможно, худшее, что можно сделать в Java.Он просто останавливает ваш код в любое время и по любой причине, и у вас нет шансов отладить его.
  • Не ошибка, но вся часть «просканировать и если» может быть заменена одной строкой: int c = Math.abs(scan.nextInt() - scan.nextInt()) Вам больше не нужны a и b после вычисления, и вы можете просто «убрать знак минуса» с абсолютным значением.

В любом случае, вот онокак бы я решил проблему с помощью алгоритма, который может генерировать один из всех приемлемых ответов. (Под этим я подразумеваю, что технически, чтобы удовлетворить запрос, вы всегда могли бы "выпустить его", например, всегда меняя последний.)

public static void main (String[] args)
{
    Scanner scan = new Scanner(System.in);
    int c = Math.abs(scan.nextInt() - scan.nextInt());      //get sign-less difference
    System.out.println(c);

    ArrayList<Integer> digits = new ArrayList<>();          //creating a list for the digits
    for (int i=c; i>0; i/=10){
        digits.add(i%10);                                   //adding a digit to the list
    }

    int randomIndex = (int) (Math.random()*digits.size());            //picking a random digit index
    int randomDigit = digits.get(randomIndex), newDigit;
    do {
        newDigit = (int) (Math.random()*10);                        //Randomize a new digit
    } while ( newDigit == randomDigit || (randomIndex==0 && randomDigit==0));   //Repeat if it is the same OR if it both the first one and it is 0
    digits.set(randomIndex, newDigit);                              //update the list
    int answer = 0;
    for (int i = 0 ; i < digits.size(); i++ ){
        answer += digits.get(i).intValue() * Math.pow(10,i);        //Revert the list into a integer
    }

    System.out.println(answer);
}

Надеюсь, я помог!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...