繳交時間:2016/10/21 (Fri.) 23:59
遲交三天以上不收件!
===============================================================
輸入:奇數 n (4 的倍數可加分、所有偶數則大大加分)
輸出:列、行、對角各數字加總的值皆一樣的魔術矩陣;至少寫出兩種
// 魔術矩陣的生成有若干方式 (移動方向、起點位置皆可更動),
Executable files can be downloaded: [BCB] and [VS C++] (下載後更名為~.exe)
Video support:
(01) https://youtu.be/tuu1DymLTFs
(02) https://youtu.be/tYdLC6LAAKY
--------------------------------------
下面提供可能的輸出畫面:
1) 輸入 7 後,印出 7*7 的 Magic square 在 Memo1 (以左上角方向填數字):
2) 同時印出 7*7 的 Magic square 在 Memo2 (以右下角方向填數字,注意其列、行、對角的和):
3) 輸入偶數,印出要求奇數的訊息:
4) 另一種介面設計,提供四種方向的選擇 (by RadioBotton)
(5) 檢測各 row, column, diagonal 的和
(6) 利用 DataGridView 呈現方陣
// ===== 印出對齊的矩陣數字 [BCB] =====
void PrintSquare(int n, int flag)
{ int i, j, k;
AnsiString row, space ;
int len = 6;
if (flag == 1) Form1->Memo1->Lines->Add(" --------- "+IntToStr(n)+"*"+IntToStr(n)+" --------- ");
else if (flag == 3) Form1->Memo2->Lines->Add(" --------- "+IntToStr(n)+"*"+IntToStr(n)+" --------- ");
for (i = 0; i < n; i++)
{ row = "";
for (j = 0; j < n; j++)
{ space = len - IntToStr(square[i][j]).Length();
for (k = 0; k < space; k++) row += " ";
row += IntToStr(square[i][j]);
}
if (flag == 1) Form1->Memo1->Lines->Add(row);
else if (flag == 3) Form1->Memo2->Lines->Add(row);
}
}
// === print by various formats [VS C++] ===
void print_square(int ** square, int n)
{ int i, j, k;
String ^ s = "";
listBox1->Items->Add("--- Magic Square "+Convert::ToString(n)+"x"+Convert::ToString(n)+" ---");
for (i=0; i<n; i++)
{ s = " ";
for (j=0; j<n; j++)
{ s += " "+Convert::ToString(square[i][j]);
}
listBox1->Items->Add(s);
}
richTextBox1->AppendText("--- Magic Square "+Convert::ToString(n)+"x"+Convert::ToString(n)+" ---\n");
for (i=0; i<n; i++)
{ for (j=0; j<n; j++)
{ richTextBox1->AppendText(square[i][j]+" ");
}
richTextBox1->AppendText("\n");
}
String ^ blank = "";
String ^ nsquare = Convert::ToString(n*n);
String^ data_str = "";
int len = nsquare->Length;
int block_len = len+2;
int blank_len = 0;
int row_sum = 0;
int col_sum = 0;
richTextBox2->AppendText("--- Magic Square "+Convert::ToString(n)+"x"+Convert::ToString(n)+" ---\n");
for (i=0; i<n; i++)
{ s = "";
for (j=0; j<n; j++)
{ data_str = Convert::ToString(square[i][j]);
blank_len = block_len - data_str->Length;
for (k=0; k<blank_len; k++) s += " ";
s += data_str;
}
richTextBox2->AppendText(s+"\n");
}
richTextBox3->AppendText("--- Magic Square "+Convert::ToString(n)+"x"+Convert::ToString(n)+" ---\n");
for (i=0; i<n; i++)
{ s = "";
row_sum = 0;
for (j=0; j<n; j++)
{ data_str = Convert::ToString(square[i][j]);
blank_len = block_len - data_str->Length;
for (k=0; k<blank_len; k++) s += " ";
s += data_str;
row_sum += square[i][j];
}
richTextBox3->AppendText(s+" _"+row_sum+"\n");
}
s = "";
for (j=0; j<n; j++)
{ col_sum = 0;
for (i=0; i<n; i++)
{ col_sum += square[i][j];
}
data_str = Convert::ToString(col_sum);
blank_len = block_len - data_str->Length;
for (k=0; k<blank_len-1; k++) s += " ";
s += "|"+data_str;
//richTextBox3->AppendText(s+"\n"+" ["+row_sum+"]");
}
row_sum = col_sum = 0;
for (i=0; i<n; i++)
{ row_sum += square[i][i];
col_sum += square[i][n-1-i];
}
s += " \\"+Convert::ToString(row_sum)+" /"+Convert::ToString(col_sum);
richTextBox3->AppendText(s+"\n");
listBox2->Items->Add("--- Magic Square "+Convert::ToString(n)+"x"+Convert::ToString(n)+" ---");
for (i=0; i<n; i++)
{ s = "";
for (j=0; j<n; j++)
{ data_str = Convert::ToString(square[i][j]);
blank_len = block_len - data_str->Length;
for (k=0; k<blank_len; k++) s += " ";
s += data_str;
}
listBox2->Items->Add(s);
}
dataGridView1->RowCount = n;
dataGridView1->ColumnCount = n;
dataGridView1->RowHeadersVisible = false;
dataGridView1->ColumnHeadersVisible = false;
//dataGridView1->AutoResizeColumns();
for (i=0; i<n; i++)
{ dataGridView1->Columns[i]->Width = 45;
for (j=0; j<n; j++)
{ dataGridView1->Rows[i]->Cells[j]->Value = square[i][j]; dataGridView1->Rows[i]->Cells[j]->Style->BackColor = Color::Honeydew;
}
}
}
=================================================================================
Magic Squares by JavaScript (下載後、以網頁 (建議 chrome) 開啟即可)