Я новичок в Java, у меня есть проблемы, обертывающие мою голову вокруг лаборатории, которую мы недавно назначили. Я надеялся, что кто-то там может помочь мне понять, с чего начать, с проблемой и некоторыми советами, чтобы пройти через нее. ПРИМЕЧАНИЕ. Я НЕ ПРОСИМ, ЧТОБЫ КТО-ТО, ЧТОБЫ НАПИСАТЬ КОД ДЛЯ МЕНЯ. Мне просто нужно небольшое объяснение. Проблема заключается в следующем:Start Off Point - программа Java Safecracker
«Предмет заперт в сейфе Klein за картиной в библиотеке второго этажа. Сейфы Клейна крайне редки, большинство из них вместе с Клейном и его фабрикой были уничтожены в Вторая мировая война. К счастью, старый Брамбо из исследований знал секреты Клейна и записал их до того, как он умер.
Сейф Klein имеет две отличительные особенности: комбинационный замок, который использует буквы вместо цифр, и выгравированную цитату на дверь. В цитате Klein всегда содержится от пяти до двенадцати отдельных заглавных букв, обычно в начале предложений, и упоминается одно или несколько номеров. Пять из прописных букв образуют комбинацию, открывающую сейф. Объединив цифры из всех e номера соответствующим образом вы получаете числовую цель. (Детали построения целевого числа классифицируют.)
Чтобы найти комбинацию вы должны выбрать пять букв v
, w
, x
, y
и z
, которые удовлетворяют следующему уравнению, где каждая буква заменяется его порядковым положением в алфавите (A=1, B=2, ..., Z=26
). Комбинация тогда vwxyz
. Если есть больше чем одно решение, то сочетание является тот, который является лексикографически наибольшим, то есть тот, который будет отображаться последним в словаре. «
v - w2 + x3 - y4 + z5 = target
» Например, если цель 1 и письмо установить ABCDEFGHIJKL
, одним возможным решением является FIECB
, т.к. 6 - 92 + 53 - 34 + 25 = 1
. В этом случае на самом деле существует несколько решений, и комбинация получается LKEBA
.
Klein считал, что можно безопасно кодировать комбинацию в гравюре, потому что это может занять много усилий, чтобы попробовать все возможности, даже если вы знали секрет. Но, конечно, компьютеров тогда не существовало ».
=== Директива Op tech ===
« Разработка Java-программы для поиска комбинаций Клейна при подготовке к развертыванию в полевых условиях. Используйте стандартную методологию тестирования в соответствии с ведомственными правилами. Ввод состоит из одной или нескольких строк, содержащих положительную целую цель менее двенадцати миллионов, пробел, затем не менее пяти и не более двенадцати отдельных заглавных букв. В последней строке будет указана нуль и буквы END; это сигнализирует о конце ввода. Для каждой строки выводится уникальная комбинация Klein или «нет решения», если нет правильной комбинации. Используйте точный формат, показанный ниже «
Пример входных данных:.
1 ABCDEFGHIJKL
11700519 ZAYEXIWOVU
3072997 SOUGHT
1234567 THEQUICKFROG
0 END
Пример вывода:
LKEBA
YOXUZ
GHOST
no solution
Профессор написал код вниз, но я просто с трудом делая его смысл заключается в следующем:
package lab2;
import java.util.Arrays;
public class Lab2 {
public static void main(String[] args) {
public static final int MAX_LETTERS = 12;
public static final int MIN_LETTERS = 5;
private String best; //best solution;
private int key; // number in input file
private int codes; // number of letters in code
int [] k = new int [MAX_LETTERS]; //holds numeric codes
public boolean is_solution (int u, int v, int x, int x, int y){ //compute the equation, test if it equals to key, return true or false
}//is_solution
public void test_combinations(int start){
int i;
if (start == MIN_LETTERS){
if (is_solution(k[0], k[1], k[2], k[3], k[4])){
char[] s = new char[5];
s[0] = (char) (k[0] + 'A' - 1);
s[1] = (char) (k[1] + 'A' - 1);
s[2] = (char) (k[2] + 'A' - 1);
s[3] = (char) (k[3] + 'A' - 1);
s[4] = (char) (k[4] + 'A' - 1);
String sol = Arrays.toString(s);
System.out.println("\n Found a Solution " + sol);
if (sol.compareTo(best) > 0)
best = sol;
}//close if is_solution
}//if start
else{
for (i = start; i<codes; i++){
temp = k[start];
k[start] = k[i];
k[i] = temp;
test_combinations(start+1);
k[i] = k[start];
k[start] = temp;
}//close for
}//close else
}//test_combinations
public lab2(){
//file
//try/catch
//inside try: read key, read code in a loop - WHILE.HASNEXT
//test if(key == 0), break
//test code.lenth is between 5 & 12, if not, break
//set best to "@@@@@@@"
//convert all characters to ordinal values, store them in array k - SUBTRACT 'A' ADD 1 - CHAR.AT
charAt(i)-'A'+1 ______ k[i] (assign to)
test_combinations(0);
//output best
//close file
}//lab2
}
}
Он дал вам код, который генерирует возможные комбинации. Вы должны указать логику, которая проверяет, является ли комбинация возможным ключом (в 'is_solution') и кодом для инициализации программы (путем считывания ключа из файла) в' lab2() ' – SJuan76
. Пожалуйста, очистите форматирование на своем код. –