題目如下:
在n行n列的數陣中, 數k(1〈=k〈=n)在每行和每列**現且僅 出現一次,這樣的數陣叫n階拉丁方陣。例如下圖就是乙個五階拉丁方陣。 編一程式,從鍵盤輸入n值後,列印出所有不同的n階拉丁方陣,並統計個數。
1 2 3 4 5
2 3 4 5 1
3 4 5 1 2
4 5 1 2 3
5 1 2 3 4
#include
#define maxorder 5
int array[maxorder][maxorder]; //定義最大階數為5階方陣
int count,num; //定義全域性計數變數num
int make(int x,int y,int n);
int judge(int x,int y);
void print();
int make(int x,int y,int n) //產生每個矩陣並計數
if(count==n*n)
print(n); //如果數字產生完畢,輸出矩陣,並計入計數器
num++;
else
for(int i=1;i<=n;++i){ //產生矩陣數字
array[x][y]=i;
count++;
if(judge(x,y)){
int yy=(y+1)%n;
int xx=x;
if(y==n-1) xx=x+1;
make(xx,yy,n);
--count; //遞迴完畢重新生成矩陣
int judge(int x,int y) //檢查元素是否在一行或一列中重複出現,是返回0,否返回1
int i;
int judgenum=array[x][y];
for( i=0;i
if(judgenum==array[x][i]) return 0;
for(i=0;i
if(judgenum==array[i][y]) return 0;
return 1;
void print(int n) //列印矩陣
for(int i=0;i
for(int j=0;j
printf( "%2d ",array[i][j]);
printf( "\n ");
printf( "\n ");
int main(){ //主函式
int n;
printf( "請輸入矩陣的階數: ");
scanf( "%d",&n);
printf( "\n ");
make(0,0,n);
printf( "%d階拉丁方陣有%d個\n ",n,num);
return 0;
輸出奇數N階魔方陣 幻方陣
從鍵盤輸入乙個奇數n,輸出n階 魔方陣 所謂魔方陣是指這樣的方陣,它的每一行 每一列和對角線之和均相等。例如3階魔方陣為 8 1 6 3 5 7 4 9 2 魔方陣的奇數排列規律是 1 將1放在第一行中間一列 2 從2開始直到n n止各數依次按下列規則存放 按 45 方向向右上走,每乙個數存放的行比...
C語言輸出三階魔方陣
c程式設計第五版 譚浩強 章節 第六章 利用陣列處理批量資料 題號 6.7 題目 輸出奇數階魔方陣 將1放在第一行中間一列 從2開始直到 n n為止各數依次按照如下規則存放 1 每乙個數存放的行是前乙個數的行減去1,列數加1 例如三階魔方陣,5在4的上一行後一列 2 如果前乙個數的行數為1,那麼下乙...
C語言的N階幻方
關於c語言的n階幻方問題 問題描述 所謂 n 階幻方是 1,2,n2 的方陣排列,且每行 每列和每條對角線上的和都相等。問題舉例 編寫程式列印 5x5 的幻方矩陣 17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9 現依...