@konstantinst13

Возможно ли решить эту задачу без массивов?

Нам задали в институте такое задание:
6360bc5c51794425954825.png

Возможно ли решить его, не используя массивы и ArrayList?

import java.util.Arrays;
import java.util.Scanner;

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

        System.out.println("Сколько вы хотите заплатить?");
        int S = scanner.nextInt(); //сумма к оплате
        int[] nominals = new int[]{500, 100, 50, 10, 5, 2, 1}; //какие номиналы имеются

        int[] paidNominals = new int[]{}; // какие номиналы внесли

        //перебор числа S по убывающей
        for (int s = S; s >= 1; s--) {

            // перебор номиналов по убывающей
            for (int z = 0; z < nominals.length; z++) {

                //Если номинал входит в сумму хоть один раз
                if ((s / nominals[z]) >= 1) {
                    //System.out.println("Нужно заплатить: "+s);
                    paidNominals = addX(paidNominals.length, paidNominals, nominals[z]);
                    s = s - nominals[z];
                    //System.out.println("+1 купюра номиналом: " + nominals[z] + ", Оставшаяся сумма: " + s);
                    s++;
                    break;
                }
            }
        }
        int[] differentBills = removeDuplicates(paidNominals); //массив заплаченных купюр БЕЗ повторений
        System.out.println("Было потрачено: "+ differentBills.length + " купюр разного достоинства");
    }

    public static int[] removeDuplicates(int[] arr) { //удаляет дубликаты
        return Arrays.stream(arr).distinct().toArray();
    }


    public static int[] addX(int n, int arr[], int x)   // добавляет x в массив
    {
        int i;
        int newarr[] = new int[n + 1]; // создаём новый массив на 1 эл больше
        for (i = 0; i < n; i++) {
            newarr[i] = arr[i]; // добавить все элементы с пред. массива до n,
        }
        newarr[n] = x; // затем добавить x на позиции n
        return newarr;
    }

}
  • Вопрос задан
  • 220 просмотров
Решения вопроса 1
Adamos
@Adamos
Например, цикл до обнуления суммы, внутри него - switch по купюрам.
В каждом case - если сумма все еще больше этой купюры, вычесть ее и наложить на некую переменную битовую маску этой купюры (1 руб - 0001b, 2 руб - 0010b, 5 руб - 0100b, 10 руб - 1000b и т.д.).
По окончании цикла подсчитать, сколько бит в той переменной выставлено в 1.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Легко. Просто пишите в индусском стиле. Далее псевдокод
print "500: ", floor(summ/500), "\n";
summ = summ % 500;
print "100: ", floor(summ/100), "\n";
summ = summ % 100;
print "50: ", floor(summ/50), "\n";
summ = summ % 50;
print "10: ", floor(summ/10), "\n";
summ = summ % 10;
print "5: ", floor(summ/5), "\n";
summ = summ % 5;
print "2: ", floor(summ/2), "\n";
summ = summ % 2;
print "1: ", summ, "\n";
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы