заполнение матрицы 2мя змейками
в общем проблема. не выводит вторую змейку (нижнюю) в матрице 10х10
<script> n=m=10; var mas=new Array(n) for (i=1; i<11; ++i) { mas[i]=new Array(10); } for (i=1; i<6; i++) { for (j=1; j<11; j++){ if (i%2==1){ mas[i][j]=(i-1)*m+j} else mas[i][j]=i*m-j+1 } } for (i=6; i<11; i++){ for (j=11; j<1; j--){ if (j%2==1){ mas[i][j]=(j-1)*n+(n-i+1)} else mas[i][j]=(j-1)*n+i } } } document.write("<table border=1>"); for (i=1; i<11; i++){document.write("<tr align='center'>"); for (j=1; j<11; j++){ document.write("<td width='10%'>"+mas[i][j]+"</td>"); } } document.write("</table>"); </script> помогите разобраться (( змейка вида 123 654 789 761 852 943 но только с 1 до 100 непрерывна |
Цитата:
Как вариант... <!DOCTYPE html> <html> <head> <style type="text/css"> </style> <script type="text/javascript"> function Go(Type) { var n=10 var o=document.getElementById('tbl') var inc=1 var i,j,k,m,d k=(Type==1)? n: -1 i=(Type==1)? 0: n-1 while (i!=k) { m=(i%2==1)? -1: n j=(i%2==1)? n-1: 0 d=(i%2==1)? -1: 1 while (j!=m) { o.rows(i).cells(j).innerHTML=inc++ j=j+d } i=i+Type } } </script> </head> <body> <script> document.write("<table id='tbl' border='1'>"); for (i=1; i<11; i++) { document.write("<tr align='center'>"); for (j=1; j<11; j++) { document.write("<td width='10%'> </td>"); } } document.write("</table>"); </script> <input type='button' value='Beg' onclick='Go(1)' /> <input type='button' value='End' onclick='Go(-1)' /> </body> </html> |
немного не так. после 50 начинает вертикальной змейкой заполнять
как мне сказали 3 цикла. 1 генератор чисел от 1 до 100. 2.заполнение первой змейкой(горизонтальной). 2. заполнение второй змейкой (вертикальной) |
покажите картинку, которая ясно покажет, что надо сделать
или алгоритм. |
![]() |
я разделил эту задачу на две подзадачи : формирование матрицы и вывод
матрица, слава Богу, я знаю, что такое :) в языке JS матрица будет массивом массивов. тобишь, это будет являться типичной матрицей размером 2х2 matrix = [ [1,2],[3,4] ]; у нас матрица 10х10. итак,займемся её формированием. // наша матрица var matrix = []; // её размеры. row-строка, col-столбец var rows = 10, cols = 10; var m = 1; // текст внутри ячейки. var left = 1;// будет ли двигаться заполнение влево.(да) for(var i=0,curr; i<rows; i++ ){ // текущая строка curr = matrix[i] = []; // формируем столбцы строки. for( var b=0; b<cols; b++ ){ // заполняем массив в зав-ти от направления. // и увеличиваем тект внутри ячейки curr[ left ? "push":"unshift" ]( m++ ); } *!* // меняем направление с каждой строкой. toggler *см.сноску left = left == false; */!* } насчёт красной строки. это тогглер (true,false,true,false....) монолайтед в какой-то теме очень изящно шаманил с побитовыми операциями. буду рад, если он напишет вновь, как можно это сделать :) теперь займёмся выводом. им я не стал заморачиваться. как быстрее - так и написал. var s = '<table width="100%" height="100%">'; for( var i=0;i<matrix.length;i++ ){ s+= "<tr>"; for( var b=0;b<matrix[i].length;b++ ) s+= "<td>"+matrix[i][b]+"</td>"; s+="</tr>" } s+="</table>"; document.body.innerHTML = s; итоговый скрипт будет таким. живой пример. он же лежит на jsfiddle <body></body> <script> // наша матрица var matrix = []; // её размеры. row-строка, col-столбец var rows = 10, cols = 10; var m = 1; // текст внутри ячейки. var left = 1;// будет ли двигаться заполнение влево.(да) for(var i=0,curr; i<rows; i++ ){ // текущая строка curr = matrix[i] = []; // формируем столбцы строки. for( var b=0; b<cols; b++ ){ // заполняем массив в зав-ти от направления. // и увеличиваем тект внутри ячейки curr[ left ? "push":"unshift" ]( m++ ); } // меняем направление с каждой строкой. left = left == false; } /* --- ВЫВОД --- */ var s = '<table width="100%" height="100%">'; for( var i=0;i<matrix.length;i++ ){ s+= "<tr>"; for( var b=0;b<matrix[i].length;b++ ) s+= "<td>"+matrix[i][b]+"</td>"; s+="</tr>" } s+="</table>"; document.body.innerHTML = s; </script> |
Часовой пояс GMT +3, время: 00:00. |