Для решения задачи используются Java-коллекции.
import java.util.*;
public class Myxa {
/*цифры числа МУХА*/
static int m;
static int y;
static int x;
static int a;
/*числа МУХА и СЛОН*/
static int n1, n2;
/*цифры числа СЛОН*/
static int а1;
static int а2;
static int а3;
static int а4;
/* для хранения цифр каждого из чисел */
static ArrayList s1 = new ArrayList();
static ArrayList s2 = new ArrayList();
/* вывод решения в виде ребуса*/
static void print(int x, int y) {
System.out.printf("%5s%n", x);
System.out.printf("+%n");
System.out.printf("%5s%n", x);
System.out.printf("_____%n");
System.out.printf("%5s%n", y);
}
public static void main(String[] args) {
for (m = 1; m <= 4; m++) {
s1.add(m); /* заносим первую использованную цифру */
for (y = 0; y <= 9; y++) {
/*если эта цифра не была еще взята,
* то добавляем ее во множеств цифр числа МУХА и
* выбираем цифру для следующей буквы
*/
if (!s1.contains(y)) {
s1.add(y);
for (x = 0; x <= 9; x++) {
if (!s1.contains(x)) {
s1.add(x);
for (a = 1; a <= 9; a++) {
if (!s1.contains(a)) {
s1.add(a);
n1 = 1000*m+100*y+10*x+a; /*число для слова МУХА */
n2 = 2*n1; /*число для слова СЛОН*/
а1 = n2 / 1000; /*выделяем цифры СЛОНа*/
а2 = (n2 % 1000) / 100;
а3 = (n2 % 100) / 10;
а4 = n2 % 10;
/*множество цифр СЛОНа*/
s2.add(а1); s2.add(а2); s2.add(а3); s2.add(а4);
/*если слова состоят из разных цифр и в слове СЛОН нет одинаковых,
* то выводим решение ребуса на экран
*/
boolean unique = true;
if ((Collections.frequency(s2, а1)) > 1) unique = false;
if ((Collections.frequency(s2, а2)) > 1) unique = false;
if ((Collections.frequency(s2, а3)) > 1) unique = false;
if ((Collections.frequency(s2, а4)) > 1) unique = false;
s2.retainAll(s1);
if ((s2.size() == 0)&&(unique))
print(n1,n2); else s2.clear();
s1.remove(s1.size()-1); /*удаляем занесенную цифру*/
}
}
s1.remove(s1.size()-1);
}
}
s1.remove(s1.size()-1);
}
}
s1.remove(s1.size()-1);
}
}
}
Можно набор цифр слона в виде ArrayList
static ArrayList s2 = new ArrayList();
заменить на TreeSet
static TreeSet s2 = new TreeSet();
тогда участок кода проверки на уникальность цифр слона сократится и будет таким:
boolean unique = false;
if (s2.size() == 4) unique = true;
вместо предыдущего
boolean unique = true;
if ((Collections.frequency(s2, а1)) > 1) unique = false;
if ((Collections.frequency(s2, а2)) > 1) unique = false;
if ((Collections.frequency(s2, а3)) > 1) unique = false;
if ((Collections.frequency(s2, а4)) > 1) unique = false;
Оставьте свой комментарий
Комментариев нет