Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите решить задачу в JavaScript

37K
16 марта 2009 года
elmaster
23 / / 11.03.2009
Есть квадратная таблица (матрица). Нужно вывести элементы от 1 до n*n в виде спирали. Например:
12
43
или
123
894
765

Я могу вывести только вернихние элементы, дальше полный ступор немогу ничего рпидумать:mad::
<title>1</title>
<script language="javascript" type="text/javascript">
var p,c,a,i,m,n,b,arr1=[0];
n=eval(prompt("n=","n"));
m=n+(n-1)+(n-1)+(n-2);
p=n+(n-1)+(n-1);
c=m;
q=n;
a=1;
b=n*n;
if (n<2) {alert("n<2!!!");}
for(i=0;i<b;i++)
{
arr1=a;
a+=1;
} document.write(arr1+"<br>");
document.write(m+"<br >");
document.write("<table border=2><tr>");
for (i=0;i<n;i++)
{
document.write("<td>"+arr1+"</td>");
}
document.write("</tr>");
document.write("<tr>");
for(m;m<c+n-1;m++)
{
document.write("<td>"+arr1[m-1]+"</td>");
}
document.write("<td>"+arr1[q]+"</td>");
document.write("</tr>");
document.write("</table>");

</script></head>
Вот пока что получилось. Помогите плз что дальше надо писать?
563
18 марта 2009 года
MrLinker
249 / / 17.09.2006
Насколько я понимаю, для данной темы есть специальный раздел.
Либо название нужно более интригующее :)
Но, тем не менее, чтобы приблизиться к решению этой задачи нужно заварить себе чашечку чая, нарисовать на листочке квадратную матрицу и внимательно на нее посмотреть.
В скором времени придет озарение: "Твою бровь, да это же кольца!!!" - подумаете вы, - "Квадратные кольца!".
Итог этой истерии будет таковым:
Чтобы "обойти матрицу по спирали" нужно последовательно пройтись по кольцам до самого центра... Т.е. после каждого кольца мы сужаем границы. Кольцо суть последовательный проход по четырем направлениям.

Вот мой вариант:
Код:
var prd = [[0,1],[1,0],[0,-1],[-1,0]];
var n = 9; // Размер матрицы

var matrix = new Array();
for(var i = 0; i<n; i++) matrix = new Array(n);
var num = 1;

var si=0, sj=0, t=Math.floor(n/2), w = n-1;

for(var l=0; l<t; l++)
{
    si=sj=l;
    for(var dir = 0; dir<4; dir++)
        for(var c=0; c < w; c++)
        {
            matrix[si][sj] = num++;
            si += prd[dir][0];
            sj += prd[dir][1];
        }
    w-=2;
}

if(l*2+1==n) matrix[l][l] = num;
563
18 марта 2009 года
MrLinker
249 / / 17.09.2006
Только сейчас дошло, что elmaster просто приколист...
37K
23 марта 2009 года
elmaster
23 / / 11.03.2009
Приколистка мая училка:D т.к. дала эту задачу решать мне))
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог