七階拉丁方陣 C語言 輸出N階拉丁方陣並統計個數

2021-10-25 16:53:17 字數 1399 閱讀 4081

題目如下:

在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 現依...