第28講 細胞構成法による魔方陣の作成△

第2話 細胞の作成
コード例

#pragma once
#include<stdlib.h>
int n;
int a1[20][20],a2[20][20],p[20][20],cn1[20],cn2[20];
int x[400],y[400];
int s;
char sbr[24][2][2];
char sb[2][2];
char sx[4],sy[4];
char cn;
namespace sbk {
        ・
        ・
        ・
#pragma endregion
  private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
          label2->Text=L"";
          DateTime^ hj=DateTime::Now;
          //n=int::Parse(textBox1->Text);
          n=4;//
ピンク色でチェックされないようにピンク色の条件を満たす適当な値を入れている。
          int h=1;
          if(n<3 || n>=12){
             label2->Text=L"TextBoxには3以上11以下の整数\r\nを入力し再度実行ボタンを\r\n押して下さい。";
             h=0;
          }

          if(h==1){
           
 /*
            s=0;
            if(n%2==1)g1(n);
            if(n%2==0)g2(n);
            syokika();
            if(n==3 || n==4)srand(0);
            if(n==5)srand(5);
            if(n==6)srand(28);
            if(n==7)srand(31);
            if(n==8)srand(597);
            if(n==9)srand(3154);
            if(n==10)srand(1114);
            if(n==11)srand(3375);
            今回は細胞の作成がうまくいっているかどうかの確認なのでいらないところを/*と*/で囲んで注釈文に変えている。
            */

            cn=0;
            zhy(); //細胞作成用座標の作成
            sbs(0); //細胞の作成
            int i,j,k;
            //作成した細胞の表示
            for(i=0;i<cn*3+1;i++)dataGridView1->Rows->Add();
            for(i=0;i<cn;i++){
              for(j=0;j<2;j++){
                for(k=0;k<2;k++){
                  dataGridView1[k,j+3*i]->Value =sbr[i][j][k]; //このdataGridView1の使い方については次話で解説
                }
              }
            }
            dataGridView1[0,cn*3]->Value =cn; //細胞総数の表示
            
/*f1(0);
            array<String^>^ w=gcnew array<String^>(16);
            int i;
            w[10]=n.ToString();w[11]=L"次";w[12]=L"魔";w[13]=L"方";w[14]=L"陣";w[15]=s.ToString();
            for(i=0;i<9;i++)w[i]=L"";
            dataGridView1->Rows->Add(w);
            DateTime^ ow=DateTime::Now;
            TimeSpan sa=ow->Subtract(*hj);
            w[10]=L"時";w[11]=L"間";w[12]=L"計";w[13]=L"則";w[14]=L":";w[15]=(sa.TotalSeconds).ToString();
            for(i=0;i<10;i++)w[i]=L"";
            dataGridView1->Rows->Add(w);
            今回は細胞の作成がうまくいっているかどうかの確認なのでいらないところを/*と*/で囲んで注釈文に変えている。
            */

          }
        }
        //細胞の座標作成関数
        void zhy(){
          char i;
          for(i=0;i<4;i++){
             sx[i]=i%2;
             sy[i]=i/2;
          }
        }
        //細胞の作成関数
        void sbs(char g){
          char i,j,k,h;
          for(i=1;i<5;i++){
             sb[sy[g]][sx[g]]=i;
             h=1;
             if(g>0){
               for(j=0;j<g;j++){
                 if(sb[sy[g]][sx[g]]==sb[sy[j]][sx[j]])h=0;
               }
             }
             if(h==1){
               if(g+1<4){
                 sbs(g+1);
               }
               else{
                 for(j=0;j<2;j++){
                   for(k=0;k<2;k++){
                     sbr[cn][j][k]=sb[j][k];
                   }
                 }
                 cn++;
               }
             }
           }
         }

              ・
              ・
              ・

実行例
入門

結構難しいですよね。解説は次話で。

第1話へ
第3話へ

戻る

VC++講義第1部へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座