teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

コードを修正しました。

2015/11/24 12:58

投稿

sgr-2
sgr-2

スコア294

answer CHANGED
@@ -10,42 +10,39 @@
10
10
  var MTX = []; // 結果格用
11
11
  var small; // ブロック内の最小値
12
12
  var size; // 処理対象のブロックの大きさ
13
- var i, j; // ループ用
13
+ var row, col; // 行、列
14
14
  var ptr; // ブロックの起点を指す(配列の添字)
15
15
  var maxlen; // 表示する値の最大長さ
16
16
  var strval; // 配列から取り出した値(文字列)
17
17
  var vallen; // 配列から取り出した値の長さ
18
- var str; //結果表示
18
+ var str; // 結果表示
19
19
 
20
-
21
20
  // 結果格納用の配列準備
22
21
  for(i=0; i<N+1; i++) MTX[i] = [];
23
22
 
24
23
 
25
- // 渦巻きとなる配列を作成
24
+ // 渦巻き状の値が入った配列を作成
26
25
  small = S - 2 * N - 1; // 最初のブロックの最小値を求める
27
26
  size = N + 1; // 最初のブロックサイズ
28
27
  ptr = 0;
29
28
  while (size > 0){
30
- for(i=0;i<size;i++){
31
- if (i==0){ // 上の行を埋める
29
+ for(col=0; col<size; col++){ // 上の行を埋める
32
- for(j=0;j<size;j++){
33
- MTX[ptr+i][ptr+j] = small + 2 * (size - 1) + j;
30
+ MTX[ptr][ptr+col] = small + 2 * (size - 1) + col;
34
- }
31
+ }
32
+ for(row=1; row<size; row++){
33
+ if (row < size-1){ // 中の行を埋める
34
+ MTX[ptr+row][ptr] = MTX[ptr+row-1][ptr] -1;
35
+ MTX[ptr+row][ptr+size-1] = MTX[ptr+row-1][ptr+size-1] + 1;
35
36
  }
36
- else if (i==size-1){ // 下の行を埋める
37
+ else{ // 下の行を埋める
37
- for(j=0;j<size;j++){
38
+ for(col=0; col<size; col++){
38
- MTX[ptr+i][ptr+j] = small + size - j - 1;
39
+ MTX[ptr+row][ptr+col] = small + size - col - 1;
39
40
  }
40
41
  }
41
- else{ // 間の行を埋める
42
- MTX[ptr+i][ptr] = MTX[ptr+i-1][ptr] - 1;
43
- MTX[ptr+i][ptr+size-1] = MTX[ptr+i-1][ptr+size-1] + 1;
44
- }
45
42
  }
46
43
 
47
44
  // 次のブロックの最小値を計算
48
- small+=Math.pow(size, 2) - (size <= 2 ? 0 : Math.pow(size -2, 2));
45
+ small+=Math.pow(size, 2) - (size <= 2 ? 0 : Math.pow(size-2, 2));
49
46
 
50
47
  size -= 2;
51
48
  ptr++;
@@ -54,9 +51,9 @@
54
51
  // 表示用
55
52
  maxlen = (N * N + S).toString().length;
56
53
  str = "";
57
- for(i=0;i<N;i++){
54
+ for(row=0; row<N; row++){
58
- for(j=1;j<N+1;j++){
55
+ for(col=1; col<N+1; col++){
59
- strval = MTX[i][j].toString();
56
+ strval = MTX[row][col].toString();
60
57
  while (maxlen > strval.length) strval = "0" + strval;
61
58
  str = str + strval + ",";
62
59
  }