пятница, 20 декабря 2013 г.

Интересная задачка

     Для проверки остаточных знаний учеников после летних каникул, учитель младших классов решил начинать каждый урок с того, чтобы задавать каждому ученику пример из таблицы умножения, но в классе 15 человек, а примеры среди них не должны повторяться. В помощь учителю напишите программу, которая будет выводить на экран 15 случайных примеров из таблицы умножения (от 2*2 до 9*9, потому что задания по умножению на 1 и на 10 — слишком просты). При этом среди 15 примеров не должно быть повторяющихся (примеры 2*3 и 3*2 и им подобные пары считать повторяющимися).

public class Zadachi{
    public static void main(String[] args){
        //Создадим массив зададий для учеников. Так как учеников 15, каждый из них получит свою строку (задание). Задание у нас состоит из 2 множителей и их произведения, т.е. в каждой строке будет 3 элемента
        int [][] Mas = new int[15][3];
        //Заполним массив заданий
        for(int i =0;i<Mas.length;i++){
            for(int h=0;h<Mas[i].length;h++){
                //Первым двум элементам строки (множителям) присвоим рандомные значения от 2 до 9
                Mas[i][h]=(int)(Math.random()*8)+2;
                //3 элемент - это результат умножения первых двух элементов строки
                if(h==Mas[i].length-1){
                    Mas[i][h]=Mas[i][h-2]*Mas[i][h-1];
                    //Проверим, нет ли среди уже свормированых заданий (строк), таких, которые по условиям задачи нельзя задавать другому ученику. Для этого переберем все результаты умножения (3 элементы) предыдущих строк.
                    for(int q=0;q<i;q++){
                        if(Mas[i][h]==Mas[q][h]&&i>0){
                            //Если мы нашли такую строку, надо убедиться, что множители в ней тоже совпадают. Для этого нам достаточно проверить совпадение одного множителя.
                            if(Mas[i][h-1]==Mas[q][h-1]||Mas[i][h-2]==Mas[q][h-2])
                            //Если мы находим такое совпадение - заполним элементы строки заново
                            --i;
                        }
                    }
                }    
            }
        }
        //С помощью простого цикла выведем уже отобранные задания на экран
        for(int i=0;i<Mas.length;i++){
            System.out.print("Задание №"+(i+1+" Умножить "));
            for(int h=0;h<Mas[i].length;h++){
                if(h==0)
                    System.out.print(Mas[i][h]+" на ");
                if(h==1)
                    System.out.println(Mas[i][h]);
            }
        }
    }
}

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

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