Ребус "МУХА + МУХА = СЛОН" на языке Java

Добавлено: 23/05/2015 22:35 |  Обновлено: 18/02/2017 21:15 |  Добавил: nick |  Просмотры: 8166 Комментарии: 0
Вводная часть
Ребус "МУХА + МУХА = СЛОН" на языке Java. В ребусе каждая буква — это цифра, разным буквам соответствуют разные цифры. Необходимо заменить буквы цифрами так, чтобы получилось верное равенство. Буква "М" в слове МУХА может иметь значения от 1 до 4, а буква "А" в этом же слове не может быть равна 0.

Для решения задачи используются Java-коллекции.
Ребус "МУХА + МУХА = СЛОН" на языке Java. В ребусе каждая буква — это цифра, разным буквам соответствуют разные цифры. Необходимо заменить буквы цифрами так, чтобы получилось верное равенство. Буква "М" в слове МУХА может иметь значения от 1 до 4, а буква "А" в этом же слове не может быть равна 0.

Для решения задачи используются 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;

Оставьте свой комментарий

Комментариев нет