Anurita Srivastava Ответов: 1

Как получить вывод для программы комбинации замков? Что не так в моей программе?


Рассмотрим кодовый замок со слотом, в котором каждый слот содержит циферблат, пронумерованный десятью последовательными десятичными целыми числами в диапазоне от 0 до 9. За одну операцию вы можете выбрать слот и повернуть циферблат одним щелчком мыши в положительном направлении. (для увеличения отображаемого числа на) или в отрицательном направлении (для уменьшения отображаемого числа на). Обратите внимание, что из-за цикличности циферблата следующая цифра после 9 - 0, а цифра перед 0 - 9). Например, если в настоящий момент на циферблате отображается цифра 0, вы можете повернуть циферблат либо на 1 (положительное направление), либо на 9 (отрицательное направление) за одну операцию.
Учитывая начальную конфигурацию чисел в каждом слоте и некоторую желаемую конфигурацию чисел, определите минимальное количество операций, которые вы должны выполнить, чтобы изменить слоты замка на желаемую конфигурацию.

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class lock {

    public static void main(String[] args) {
     
        Scanner s=new Scanner(System.in);
        int n,m,sum=0;
        int n1[]=new int[5];
        int n2[]=new int[5];
        for(int i=0;i<5;i++)
            n1[i]=s.nextInt();
        for(int j=0;j<5;j++)
            n2[j]=s.nextInt();
        for(int k=0;k<5;k++)
        {
            n=Math.abs(n2[k]-n1[k]);
            m=Math.abs((9-n2[k])+(n1[k]+1));
            if(n<=m)
                sum=sum+n;
            else
                sum=sum+m;
            n=0;m=0;
        }
        System.out.println(sum);
    }
}


Что я уже пробовал:

Эта формула, которая дает мне выход 13, правильный выход - 9.
n=Math.abs(n2[k]-n1[k]);
m=Math.abs((9-n2[k])+(n1[k]+1));

1 Ответов

Рейтинг:
10

Patrice T

Попробуйте с

for(int k=0;k<5;k++)
{
    n=Math.abs(n2[k]-n1[k]);
    m= 10- n;
    if(n<=m)
        sum=sum+n;
    else
        sum=sum+m;
    n=0;m=0;
}


Цитата:
Это тоже работает, но я не могу понять, где мой код идет не так. Спасибо за помощь.

Ваш код идет не так, потому что m ошибается.
Так как колесо имеет 10 положений, а n это количество кликов в одну сторону, в другую-это 10-n и ваш m не делает этого потому что n2[k]-n1[k] является положительным или отрицательным.

Цитата:
Мой n2[k]-n1[k] всегда положителен, так как я использовал Math.abs,и если вы проверите формулу, она идеально подходит.

n2[k]-n1[k] является положительным, потому что встроен в abs(), смотреть m, он встроен в abs() с чем-то другим проблема заключается в чем-то другом, что находится в abs().
Сказал иначе,
m=10-Math.abs(n2[k]-n1[k]);
// and
m=Math.abs((9-n2[k])+(n1[k]+1));
// which is
m=Math.abs(10-(n2[k]-n1[k]));

это 2 разные вещи


Anurita Srivastava

Это тоже работает, но я не могу понять, где мой код идет не так. Спасибо за помощь.

Anurita Srivastava

Мой n2[k]-n1[k] всегда положителен, так как я использовал Math.abs,и если вы проверите формулу, она идеально подходит.