Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

denkaty avatar denkaty 2 Точки

09. Pokemon Don't Go

Имам проблем със задачата. Judge гърми на два теста. Hещо съм пропуснал, но не виждам какво е.

Задачата: https://softuni.bg/trainings/resources/officedocument/43665/exercise-lists-arrays-advanced-java-fundamentals-september-2019/2440

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
import java.util.stream.Collectors;

public class PokemonDontGo09 {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        List<Integer> inputNumbers = Arrays.stream(scanner.nextLine().split("\\s+"))
                .map(Integer::parseInt)
                .collect(Collectors.toList());

        int sum = 0;
        while (inputNumbers.size() > 0) {
            int index = Integer.parseInt(scanner.nextLine());
            boolean flag = false;
            if (index < 0) {
                index = 0;
                inputNumbers.remove(index);
                inputNumbers.add(index, inputNumbers.get(inputNumbers.size() - 1));
                flag = true;
            }
            else if (index > inputNumbers.size() - 1) {
                index = inputNumbers.size() - 1;
                inputNumbers.remove(index);
                inputNumbers.add(inputNumbers.get(0));
                flag = true;
            }

            int numberAtIndex = inputNumbers.get(index);
            sum += inputNumbers.get(index);
            if (!flag){
                inputNumbers.remove(index);
            }

            for (int i = 0; i < inputNumbers.size(); i++) {

                if (inputNumbers.get(i) <= numberAtIndex) {
                    int newIncrease = numberAtIndex + inputNumbers.get(i);
                    inputNumbers.set(i, newIncrease);
                } else {
                    int newDecrease = inputNumbers.get(i) - numberAtIndex;
                    inputNumbers.set(i, newDecrease);
                }

            }
        }
        System.out.println(sum);
    }
}
Тагове:
0
Fundamentals Module
MartinBG avatar MartinBG 4803 Точки
Best Answer

По условие, когато индексът е извън пределите на масива, трябва да се използва стойността на премахнатия елемент (първи или последен).  В предложеното решение тази стойност е изгубена още в тялото на if/else и вместо нея се използва заместващата стойност (равна на стойността на последния или първия елемент).

 

Оправеното решение:

 

import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
import java.util.stream.Collectors;

public class PokemonDontGo09 {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        List<Integer> inputNumbers = Arrays.stream(scanner.nextLine().split("\\s+"))
                .map(Integer::parseInt)
                .collect(Collectors.toList());

        int sum = 0;
        while (!inputNumbers.isEmpty()) {
            int index = Integer.parseInt(scanner.nextLine());
            int value = 0;

            if (index < 0) {
                value = inputNumbers.get(0);
                inputNumbers.set(0, inputNumbers.get(inputNumbers.size() - 1));
            } else if (index >= inputNumbers.size()) {
                value = inputNumbers.get(inputNumbers.size() - 1);
                inputNumbers.set(inputNumbers.size() - 1, inputNumbers.get(0));
            } else {
                value = inputNumbers.remove(index);
            }

            sum += value;

            for (int i = 0; i < inputNumbers.size(); i++) {
                if (inputNumbers.get(i) <= value) {
                    inputNumbers.set(i, inputNumbers.get(i) + value);
                } else {
                    inputNumbers.set(i, inputNumbers.get(i) - value);
                }
            }
        }

        System.out.println(sum);
    }
}

 

1
denkaty avatar denkaty 2 Точки

Благодаря!!

1
astankin avatar astankin 5 Точки

Здравейте,

Може ли малко помощ за същата задача но на Python. Дава ми 90/100 и не мога да разбера какво пропускам.

Благодаря предварително !

numbers = list(map(int, input().split()))
sum_value = 0
while numbers:
    index = int(input())
    removed_elem = 0
    if index < 0:
        removed_elem = numbers[0]
        numbers[0] = numbers[-1]
    elif index >= len(numbers):
        removed_elem = numbers[-1]
        numbers[-1] = numbers[0]
    else:
        removed_elem = numbers[index]
        numbers.remove(removed_elem)
    sum_value += removed_elem
    for i in range(len(numbers)):
        if numbers[i] <= removed_elem:
            numbers[i] += removed_elem
        else:
            numbers[i] -= removed_elem

print(sum_value)
0
MartinBG avatar MartinBG 4803 Точки

@astankin

Грешката е на този ред:

numbers.remove(removed_elem)

Ако проверите документацията, ще откриете, че list.remove(x) "Remove the first item from the list whose value is equal to x.".

По условие трябва да премахнем елемент от конкретен индекс, а горната команда не ни гарантира това, aко има повече от един елемент с търсената стойност.

Трябва да се използва list.pop([i]), която "Remove the item at the given position in the list, and return it":

removed_elem = numbers.pop(index)

 

1
04/06/2022 01:01:26
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.