Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Найти закономерность] Таблица 4х4, числа в ней.


Автор: KasMP 29.9.2008, 21:04
Приветствую smile !

Жирным выделено что-то типа координат. Надо по паре координат выдать соответствующее число.
Вы видите здесь хоть какую-нибудь закономерность? Кроме симметрии, разумеется smile .

user posted image

Автор: vinter 29.9.2008, 21:48
если представиь каждую клетку как произведение соответвующих координат + число m, То можно посторить матрицу m

0   -2  -4  -8
1    0  -1  -4
1    0   0  -2
1    1   1   0

т.е по краям мы имеем числа от 0 и дальше по возрастанию 2 в степени >=1, со знаком минус. Главаня диагональ все нули. непонятно как сюда приплести -1, а сотальное вроде похоже на закономерность. 

Автор: bars80080 29.9.2008, 21:59
если из каждого числа вычесть его самого, то мы получим абсолютную матрицу, где каждый элемент равен произведению координат

Автор: KasMP 29.9.2008, 22:13
Вообще говоря, надо найти закономерность не внутри самой матрицы, а во взаимосвязи пары координат и числа.
Т.е. получается как бы функция от двух переменных: например, f(1,2)=3, f(1,4)=4, f(3,3)=8, т.п. и т.д.. Мы знаем значения функции при любых переменных (а они изменяются только от 1 до 4). Нам нужно найти саму функцию!

Изначально задачка звучит так:
Цитата
Есть шахматная доска. На ней стоит конь. Известно поле, на котором он стоит (я назвала это координатами).
Скольким полям угрожает конь?


Добавлено через 3 минуты и 8 секунд
Цитата(bars80080 @  29.9.2008,  21:59 Найти цитируемый пост)
если из каждого числа вычесть его самого, то мы получим абсолютную матрицу, где каждый элемент равен произведению координат 
По-моему, если из каждого числа вычесть его самого (довольно интересная операция, которая с элементарными преобразованиями увязывается тяжело), то мы получим нулевую матрицу... Что такое абсолютная матрица?
Позволю себе повториться: главное - взаимосвязь между парой координат и соответствующим числом.

Добавлено через 7 минут и 16 секунд
На худой конец, перебор smile никто не отменял.

Добавлено через 9 минут и 42 секунды
Хотя, с другой стороны, закономерности внутри матрицы помогут установить взаимосвязь между координатами и числом.

Автор: KasMP 29.9.2008, 22:42
Цитата(vinter @  29.9.2008,  21:48 Найти цитируемый пост)
если представиь каждую клетку как произведение соответвующих координат + число m, То можно посторить матрицу m

0   -2  -4  -8
1    0  -1  -4
1    0   0  -2
1    1   1   0

т.е по краям мы имеем числа от 0 и дальше по возрастанию 2 в степени >=1, со знаком минус. Главаня диагональ все нули. непонятно как сюда приплести -1, а сотальное вроде похоже на закономерность.
Я подумаю об этом завтра. По сути мы получаем из пары координат число, но только через эту доп.матрицу... А в доп.матрице закономерности есть... Надо подумать, короче говоря smile .

Автор: bars80080 29.9.2008, 23:34
та чё здесь думать? ты ж не привела задачу полностью (хотя и по этому куску можно было догадаться).
построй в голове шахматную доску, где клетки - это столбики кубиков. по два в углах и по восемь в середине. какую фигуру это напоминает?
правильно - пространственная парабола. закон по каждой стороне выглядит примерно так: y = -0.25x^2 + 2*x
соответственно, осталось переложить в трёхмерную систему
скажем так:
Код
<?php
function wfunc($x, $y) {
    $z = -0.25*$x*$x + 2*$x - 0.25*$y*$y + 2*$y;
    return $z; 
}
$x = array(0,1,2,3,4,5,6,7);
$y = array(0,1,2,3,4,5,6,7);
echo '<table border="1">';
for($i = 0; $i < 8; $i++) {
    echo '<tr>';
    for($j = 0; $j < 8; $j++) {
        echo '<td>'.wfunc($x[$i], $y[$j]).'</td>';
    }
    echo '</tr>';
}
echo '</table>';
?>
если запустить, то увидишь нечто похожее. но коэффициенты не точные, и нехватает свободного члена. плюс потом нужно округлить. а так это примерно то что надо

Автор: Dov 30.9.2008, 11:58
Цитата
...
Ход за мной - что делать!? Надо, Сева, -
Наугад, как ночью по тайге...
Помню - всех главнее королева:
Ходит взад-вперед и вправо-влево, -
Ну а кони вроде - только буквой "Г".
              Владимир   Высоцкий 


Имхо, здесь никакой закономерности нет. Таблица просто показывает количество допустимых ходов  коня из каждой клетки шахматной доски, подразумевая, что эта доска имеет размеры 8 х 8 и, учитывая тот факт, что конь не может сделать ход за "пределы доски". Отсюда следует, что, начиная с клетки(3; 3), конь может сделать 8 ходов, т.е. попасть на 8 разных клеток. А чем ближе к "краю доски", тем меньше допустимых ходов имеет конь. Например, находясь в клетке(1; 1) конь имеет всего 2 допустимых хода. Всё это можно вычислить, прибавляя смещение к "координатам" коня и отбрасывая отрицательный результат, говорящий о том, что конь вышел за "пределы доски". 
Ну, а так, в данной конкретной задаче, можно "вычислить результат", используя навыки программирования. Например, на языке СИ это может выглядеть так:
Код
result = (x >= 3 && y >= 3 ? 8 : x + y == 5 ? x * y : x + y); 

Перевожу...
Если обе координаты больше или равны 3, то результат равен 8, 
иначе
     если сумма координат равна 5, то результат равен произведению этих координат, а иначе их сумме.

Вроде так, хотя могу и ошибаться...  smile 

 

Автор: KasMP 30.9.2008, 13:31
Dov smile , хоть сегодня днем во время перерыва я и решила делать точно так же smile , тебе спасибо за само желание помочь smile, за то, что не поленился все так подробно описать  smile , за приятный тон smile , за примеры smile .
Благодарю smile.

Автор: Dov 30.9.2008, 16:29
А сама программа по поиску значений(если кому - то интересно) могла бы выглядеть так:
Код
bool isValid(int x, int y)
{
    return ( x >= 1 && x <= 8 && y >= 1 && y <= 8 );
}

int main()
{
    int    x, y, n, result;    
    int offset[8][2] = { {1, 2}, {1, -2}, {2, 1}, {2, -1}, {-1, 2}, {-1, -2}, {-2, 1}, {-2, -1} };

    cout << "Enter test count: ";
    cin  >> n;

    while( n-- )
    {
        cout << "Enter x: ";
        cin  >> x;
        cout << "Enter y: ";
        cin  >> y;        

        result = 0;
        for( int i = 0; i < 8; i++ )
            if( isValid(x + offset[i][0], y + offset[i][1]) )
                result++;

        cout << "Result : " << result << endl << endl;
    }
}


Добавлено через 1 минуту и 31 секунду
Нужно только защиту от дурака прикрутить...  smile 


KasMP, не за что...  smile 

Автор: KasMP 30.9.2008, 16:43
А у меня вот так smile smile !
Код

#include <iostream>
using namespace std;

int main() {
    short x, y;
    short r;
    
    cout << "Input x, y.\n";
    cin >> x >> y;
    
    if (x>4) x=9-x; if (y>4) y=9-y;
    r=(x>=3 && y>=3 ? 8
            : x+y==5 ? x*y
            : x + y);
            
    cout << "The knight attacks " << r << " fields.\n";  
    
    return 0;
}

Только про дурака я не подумала... Если что, потом доделаю :smile .


Автор: okaton 11.10.2008, 10:28
Цитата

Имхо, здесь никакой закономерности нет. Таблица просто показывает количество допустимых ходов  коня из каждой клетки шахматной доски, подразумевая, что эта доска имеет размеры 8 х 8 и, учитывая тот факт, что конь не может сделать ход за "пределы доски". Отсюда следует, что, начиная с клетки(3; 3), конь может сделать 8 ходов, т.е. попасть на 8 разных клеток. А чем ближе к "краю доски", тем меньше допустимых ходов имеет конь. Например, находясь в клетке(1; 1) конь имеет всего 2 допустимых хода. Всё это можно вычислить, прибавляя смещение к "координатам" коня и отбрасывая отрицательный результат, говорящий о том, что конь вышел за "пределы доски". 
Ну, а так, в данной конкретной задаче, можно "вычислить результат", используя навыки программирования

 smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)