заполнение матрицы 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, время: 18:14. |