第7講 多次元配列と1次元配列の関係
第7話 転置行列の表示も1次元for文で行う!
011
の転置行列の表示も1次元for文で実点するコード例
//以下C#を始めるためのお呪い
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//以上C#を始めるためのお呪い
namespace a //初心者はお呪い=決まり事と思い一切気にしない
{
  class Program //初心者はお呪い=決まり事と思い一切気にしない
  {
    static void Main(string[] args) //私は社長だ。
    {
      f();
    }
    static void f()
    {
      int[] a = new int[12];
      Random r = new Random();
      //以下データ生成
      for (int i = 0; i < 12; i++)
      {
        a[i] = r.Next(100);
      }
      //以下行列データ表示
      for (int i = 0; i < 12; i++)
      {
        if (i > 0 && i % 4 == 0) Console.WriteLine(); //改行
        if (a[i] < 10) Console.Write(" {0:d} ", a[i]); //1桁の場合
        if (a[i] >= 10) Console.Write("{0:d} ", a[i]); //2桁の場合
      }
      Console.WriteLine(); //改行
      Console.WriteLine(); //改行
      //以下左右反転行列データ表示
      for (int i = 0; i < 12; i++)
      {
        if (i > 0 && i % 4 == 0) Console.WriteLine(); //改行
        if (a[4 * (i / 4)+(3 - (i % 4))] < 10) Console.Write(" {0:d} ", a[4 * (i / 4)+(3 - (i % 4))]); //1桁の場合
        if (a[4 * (i / 4)+(3 - (i % 4))] >= 10) Console.Write("{0:d} ", a[4 * (i / 4)+(3 - (i % 4))]); //2桁の場合
      }
      Console.WriteLine(); //改行
      Console.WriteLine(); //改行
      //以下上下反転行列データ表示
      for (int i = 0; i < 12; i++)
      {
        if (i > 0 && i % 4 == 0) Console.WriteLine(); //改行
        if (a[8 - 4 * (i / 4) + (i % 4)] < 10) Console.Write(" {0:d} ", a[8 - 4 * (i / 4) + (i % 4)]); //1桁の場合
        if (a[8 - 4 * (i / 4) + (i % 4)] >= 10) Console.Write("{0:d} ", a[8 - 4 * (i / 4) + (i % 4)]); //2桁の場合
      }
      Console.WriteLine(); //改行
      Console.WriteLine(); //改行
      //以下転置行列データ表示
      
for (int i = 0; i < 12; i++)
      {
        if (i > 0 && i % 3 == 0) Console.WriteLine(); //改行
        if (a[(4 * i) % 11] < 10) Console.Write(" {0:d} ", a[(4 * i) % 11]); //1桁の場合
        if (a[(4 * i) % 11] >= 10) Console.Write("{0:d} ", a[(4 * i) % 11]); //2桁の場合
      }
      Console.WriteLine(); //改行

    }
  }
}

解説
0,4,8,12,16,20,24,28,32,36
を11で割った余りを求めると、
0,4,8,1,5,9,2,6,10,3,7
になります。
この手法を是非頭に刻んで下さい。
将来テトリスなどを開発するときに、
活かせる手法です。
私の数独作成ソフトにおいても、
ヒントになる数字を配置するときに使っています。
数独作成においては
(以下はVBAの場合)
For i = 0 To h - 1 'hはヒント数
  g= p*i Mod 80
  y(i) = Int(g / 9)
  x(i) = g Mod 9
Next

のようにして座標を設定してヒントとなる数字を配置しています。
80で割った余りになっているのは、
プログラミングの世界では普通0からカウントし、
80が81番目になるからです。
9×9=81マスの数字を埋めて行くのが数独(ナンプレ)ですよね。

さて、次話では3次元配列と1次元配列の関係を考えます。



第6話へ   第8話へ

002

初心者のための excel 2016 マクロ VBA 入門講義 基礎から応用まで
vc++ c言語 c++ 入門 初心者 基礎から応用まで
eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門

数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
本サイトトップへ