Для моего задания я должен разрешить игроку выбирать 6 номеров из двух разных списков, как им заблагорассудится.
List<Integer> large = Arrays.asList(25, 50, 75, 100);
List<Integer> small = Arrays.asList(1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6,
7, 7, 8, 8, 9, 9, 10, 10);
После того, как они выбрали свои номера, скажем, [100, 3, 5, 6, 9, 5], они затем генерируют целевое число разрешений, например, 299, и тогда они могут использовать только числа, выбранные как средство достижения цели, используя ТОЛЬКО умножения, сложения, вычитания и деления. Таким образом, они могли вводить, например, 100 * 3 + 5 - 6, чтобы достичь цели 299, и это будет проверено и оценено соответствующим образом.
К сожалению, на самом деле у меня не так много возможностей, и я немного смущен тем, как это сделать, даже начинаю делать это, я не ищу прямой ответ, возможно, некоторые указатели или внешняя помощь будут высоко оценены,
Если мы следуем за Бедмасом (вычитание с добавлением разложения деления экспонентов в скобках), мы можем разбить это на простую функцию.
Сначала переведите уравнение в список компонентов:
100 * 3 + 5 - 6
изменения в
["100", "*", "3", "+", "5", "-", "6"]
Теперь оцените каждый элемент, чтобы убедиться, что они действительны. т.е.) Каждое значение в списке компонентов должно быть в списке выбора или иметь значение, */+ -, Также, если существует n nums, тогда должно быть n-1 syms
Чтобы получить результат, мы можем затем оценить список,... слияние разделов num-sym-num по мере продвижения, в порядке постели
В псевдо:
func int compute_val(ListString eqn)
while not eqn.length is 1
if "*" in eqn
index = eqn.getIndex("*")
replace eqn[index -1:index +1] with str((int) eqn[index -1] * (int)eqn[index +1])
else if "/" in eqn
index = eqn.getIndex("/")
replace eqn[index -1:index +1] with str((int) eqn[index -1] / (int)eqn[index +1])
else if "+" in eqn
index = eqn.getIndex("+")
replace eqn[index -1:index +1] with str((int) eqn[index -1] + (int)eqn[index +1])
else if "-" in eqn
index = eqn.getIndex("-")
replace eqn[index -1:index +1] with str((int) eqn[index -1] - (int)eqn[index +1])
return (int)eqn[0]
Это будет прогресс списка, поскольку уравнение оценивается в цикле
["100", "*", "3", "+", "5", "-", "6"] --> ["300", "+", "5", "-", "6"] -->
["305", "-", "6"] --> ["299"]
Это полезно?
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
public class JavaApplication97 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int[] s = {1, 2, 3, 4};
List<Integer> large = new ArrayList<>(Arrays.asList(25, 50, 75, 100));
List<Integer> small = new ArrayList<>(Arrays.asList(1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10));
List<Integer> yourNumbers = new ArrayList<>();
int numbersToSelect = 6;
while (numbersToSelect > 0) {
System.out.println("Choose " + numbersToSelect + " numbers from these numbers : " + large + " or " + small);
Integer input = in.nextInt();
boolean isItThere = false;
if (large.contains(input)) {
isItThere = true;
large.remove(input);
} else if (small.contains(input)) {
isItThere = true;
small.remove(input);
}
if (isItThere) {
yourNumbers.add(input);
numbersToSelect--;
System.out.println("Number " + input + " is added");
} else {
System.out.println("There is no such number");
}
}
}
}
Пример вывода:
Choose 6 numbers from these numbers : [25, 50, 75, 100] or [1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10]
25
Number 25 is added
Choose 5 numbers from these numbers : [50, 75, 100] or [1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10]
25
There is no such number
Choose 5 numbers from these numbers : [50, 75, 100] or [1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10]
5
Number 5 is added
Choose 4 numbers from these numbers : [50, 75, 100] or [1, 1, 2, 2, 3, 3, 4, 4, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10]
5
Number 5 is added
Choose 3 numbers from these numbers : [50, 75, 100] or [1, 1, 2, 2, 3, 3, 4, 4, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10]
5
There is no such number
Choose 3 numbers from these numbers : [50, 75, 100] or [1, 1, 2, 2, 3, 3, 4, 4, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10]
100
Number 100 is added
Choose 2 numbers from these numbers : [50, 75] or [1, 1, 2, 2, 3, 3, 4, 4, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10]
6
Number 6 is added
Choose 1 numbers from these numbers : [50, 75] or [1, 1, 2, 2, 3, 3, 4, 4, 6, 7, 7, 8, 8, 9, 9, 10, 10]
50
Number 50 is added
Вам нужно несколько шагов, и, как я полагаю, это домашняя задача, я не собираюсь давать полный ответ:
В то время как 2 и 3 тривиальны, первая часть, вероятно, самая сложная для вас и ядро задачи. Вы можете получить дополнительную информацию по этой задаче: Умный дизайн математического анализатора?