вторник, 31 января 2012 г.

Массив массивов: длинная-длинная задача…

Как мы и договорились сегодня с группой из Салавата – публикую одну, но "многометодную" задачу.

Задача, возможно, и не самая сложная)))), тем более, что часть мы сегодня сделали на занятии -- но длинная она наверняка, поэтому кроме ума, понадобится еще и много-много терпения.



Назовем ячейку массива "счастливой", если выполняются (одновременно) следующие условия:
1.      Сумма значений в "строке" (то есть во внутреннем массиве, к которому относится ячейка) равна значению в данной ячейке.
2.      Сумма значений в "столбце" (то есть в ячейках всех внутренних массивов – ячейках, у которых такой же порядковый номер во внутреннем массиве, как и у данной ячейки, то есть в ячейках с одинаковым индексом) равна значению в данной ячейке.

Надо написать класс, который находит все "счастливые" ячейки в массиве массивов ("двумерном") и выводит о каждой такой ячейке следующую информацию:
·         ее значение;
·         ее положение в массиве массивов.

Кроме того, класс должен определять, какое из значений в "счастливых" ячейках встречается чаще всего.

Разумеется, размеры массива и его содержание можно задавать по-разному: можно – через ввод параметров с клавиатуры (гибко), можно ­– заранее устанавливать значения… Выбирайте сами.

Я советую писать класс "по частям": проверять каждый этап и использовать как можно больше методов.

Удачи!

2 комментария:

  1. Этот комментарий был удален автором.

    ОтветитьУдалить
  2. import java.util.*;
    class nn2
    { static Scanner reader=new Scanner(System.in);
    public static void main(String[] args)
    { int a[][]=new int[reader.nextInt()][reader.nextInt()];
    int x=reader.nextInt(), y=reader.nextInt();
    int k=0, t=0, n=0, max=0, r=0;
    zapolni(a,x,y);
    for (int i=0;i<a.length;i++)
    System.out.println (Arrays.toString(a[i]));
    for (int i=0;i<a.length; i++)
    { for (int j=0;j<a[i].length;j++)
    if (check(a, i, j, r)==1) k++;}
    if (k!=0)
    {int mas[][]=new int [2][k];
    for (int i=0;i<a.length; i++)
    { for (int j=0;j<a[i].length;j++)
    { r=1;
    if (check(a, i, j, r)==1) {mas[0][t]=a[i][j]; t++;} } }
    for (int i=0;i<mas[0].length;i++)
    { for (int j=0;j<mas[0].length;j++)
    if (mas[0][i]==mas[0][j]) mas[1][i]++;}
    for (int i=0;i<mas[0].length;i++)
    { max=Math.max(mas[1][i],max);
    if (mas[1][i]==max) n=mas[0][i];}
    System.out.println ("Чаще всего в счастливых встречается значение "+n);}}
    static void zapolni(int [][] b, int m, int n)
    { for(int i=0;i<b.length;i++)
    for (int j=0;j<b[i].length;j++)
    b[i][j]=m+(int)(n*Math.random()); }
    static int check (int [][] a, int str, int stl, int r)
    {int sum1=0, sum2=0, k=0;
    for (int i=0;i<a.length;i++)
    {sum1=sum1+a[str][i];
    sum2=sum2+a[i][stl];}
    if ((sum1==a[str][stl]) && (sum2==a[str][stl]))
    { k=1;
    if (r==1)
    System.out.println ("Ячейка "+str+";"+stl+" со значением "+a[str][stl]);}
    return k;}}

    ОтветитьУдалить