Мне по учёбе нужно решить задание:
Я написал решение, в котором от суммы отнимается число. Оно работает верно, но его отвергли. Мне сказали переписать его с помощью деления ( / ), потому что оно более производительное, чем вычитание.
Как возможно это сделать?
Мне нужно поменять s = s - nominals[z]; на деление. Если я так и пишу, то программа уходит в бесконечный цикл..
import java.util.Scanner;
public class execution {
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}; //какие купюры имеются
ArrayList<Integer> paidNominalsArrayList = new ArrayList<Integer>(); // какие номиналы внесли
//перебор числа 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);
paidNominalsArrayList.add(nominals[z]); //добавляем потраченный номинал в массив
s = s - nominals[z]; //НУЖНО ЗАМЕНИТЬ НА ДЕЛЕНИЕ
System.out.println("+1 купюра номиналом: " + nominals[z] + ", Оставшаяся сумма: " + s);
s++;
break;
}
}
}
// Сколько было потрачено РАЗНЫХ купюр? Чтобы узнать
// помещаем нашу коллекцию в сет (в нём не бывает дубликатов)
Set<Integer> set = new HashSet<>(paidNominalsArrayList);
System.out.println("Были потрачено: "+ set.size()+" купюр разного достоинства");
}
}