【C語言】輸出N階拉丁方陣並統計個數
題目如下:
在N行N列的數陣中, 數K(1〈=K〈=N)在每行和每列中出現且僅 出現一次,這樣的數陣叫N階拉丁方陣。例如下圖就是一個五階拉丁方陣。 編一程式,從鍵盤輸入N值後,打印出所有不同的N階拉丁方陣,並統計個數。
1 2 3 4 52 3 4 5 1
3 4 5 1 2
4 5 1 2 3
5 1 2 3 4
#include <stdio.h> #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 <y;i++) if(judgenum==array[x][i]) return 0; for(i=0;i <x;i++) if(judgenum==array[i][y]) return 0; return 1; } void print(int N) //列印矩陣 { for(int i=0;i <N;i++){ for(int j=0;j <N;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; }
相關推薦
【C語言】輸出N階拉丁方陣並統計個數
題目如下: 在N行N列的數陣中, 數K(1〈=K〈=N)在每行和每列中出現且僅 出現一次,這樣的數陣叫N階拉丁方陣。例如下圖就是一個五階拉丁方陣。 編一程式,從鍵盤輸入N值後,打印出所有不同的N階拉丁方陣,並統計個數。 1 2 3 4 5
【C語言】求N的階乘
求N的階乘 //輸入一個數 n ,求n! #include "stdio.h" int main(){ int n,i; double l = 1; //提高精度 printf("Enter N:"); scanf("%d",&n); for(i = n; i
【C語言】輸出“*”菱形圖案
問題:在螢幕上輸出一個菱形圖案 目標圖案: 實現思路: 由目標圖案可知:該圖案共有13行,每行除了有“*”外,第一個“*”之前還包括空格。我們可以把整個圖案分為上7行和下6行來看。上7行中,空格的個數隨行數增加而減少1,“*”的個數
【c語言】輸出以下4*5的矩陣
// 輸出以下4*5的矩陣 // 1 2 3 4 5 // 2 4 6 8 10 // 3 6 9 12 15 // 4 8 12 16 20 #include <stdio.h> int main() { int i,j,k,l; for( i = 1
【C語言】輸出100~999之間的所有“水仙花數”
“水仙花數”: “水仙花數”又稱為“阿姆斯特朗數”。如果一個n(n≥3)位數的各位數字的n次冪之和等於該數本身,則該數稱為“水仙花數”。如:153=1³+5³+3³。 問題:輸出100~999之間的所有“水仙花數”。 實現思路: 根據
【C語言】輸出菱形星號圖案
#include<stdio.h> int main() { int i,j,k; for(i=0;i<=6;i++) { for(j=0;j<=5-i;j++)
【c語言】輸出一個圖形
/* 輸出 ********** very good! ********** */ #include <stdio.h> int main() { int i; for( i = 0; i < 10; i++) { print
【C語言】輸出好看的星星圖形
想要輸出下面的星星圖案 * *** ***** ******* ********* *********** ************* **********
【c語言】輸出平行四邊形圖案
#include <stdio.h> int main() { char a[5]={'*','*','*','*','*'}; int i,j,k; char space=' '; for(i=0;i<5;i++) { printf("\n
【c語言】分別輸出1!和n!的值(要求使用靜態變數)
#include<stdio.h> /* 需求:編寫程式分別輸出1!到n!(要求使用靜態變數) 分析:使用一個函式定義一個靜態變數,用來存放每次呼叫完成之後 階乘的數 例如: f(1) = 1 f(2) = 2 f(3) = 3 在f(2)的基礎上直接 3*2 返回6 就可以獲得該
【C語言】簡單的瞭解遞迴(求斐波那契,n的階乘,字串長度,把一個整型(無符號),轉化為字元型並打印出來)
簡單瞭解遞迴1.什麼是遞迴???程式設計程式呼叫自身的程式設計技巧稱為遞迴( recursion)遞迴做為一種演算法在程式設計語言中廣泛應用。 一個過程或函式在其定義或說明中有直接 或間接呼叫自身的一種方法,它通常把一個大型複雜的問題層層轉化為一個與原問題相似的 規模較小的問
【C語言】推斷一個數是否為2的n次方
post data- popu scanf scan ng- 輸入 ont print //推斷一個數是否為2的n次方 #include <stdio.h> int is_two_n(int num) { if ((num&(num - 1))
【C語言】利用迴圈輸出菱形
輸出菱形的思想主要是用了等差數列 an = a1 + (n - 1) * d 來求每個迴圈的約束條件; 一個完整的菱形必須是由空格 、星形 來組成,切分為兩部分。 題目效果如下: //要求輸出如下圖形 * *** *
【C語言】輸入一個整數N,求N以內的素數之和
【C語言】輸入一個整數N,求N以內的素數之和 /* ============================================================================ Name
【C語言】實現對一個8bit資料(unsigned char 型別)的指定位(例如第n位)的置0或者置1操作,並保持其他位不變
請編碼實現以下功能的函式 功能:實現對一個8bit資料(unsigned char 型別)的指定位(例如第n位)的置0或者置1操作,並保持其他位不變。 函式原型:void bit_set(unsigned char *p_data,unsigned char position,int flag)
【c語言】從字串str中擷取一個子串,要求子串是從str的第m個字元開始 由n個字元組成
#include<stdio.h> #include<string.h> /* 編寫程式:從字串str中擷取一個子串,要求子串是從str的第m個字元開始 由n個字元組成 程式理解: 需求中要求的是從一個字串中擷取固定的長度 m---->是開始的個數 n---->是
【c語言】用迴圈結構輸出下列數字金字塔
#include<stdio.h> void main(){ int i,j,k; for(i=1;i<=10;i++){ for(j=10;j>i;j--) printf(" "); for(k=1;k<=(2*i-1)/2
【C語言】對一個n*n矩陣,通過行變換,使其每行元素的平均值按遞增順序排序
#include<stdio.h> int main() { int n,a[100][100],r,c,i,j; scanf("%d",&n); for(i=0;i<n;i++) { for(j=0;j<n;j++) scanf("%d",&am
【C語言】求1-N的和(遞迴法)
遞迴公式: 條件:f(1) = 1 遞迴條件:f(n-1) + n 為了手機顯示方便(配圖): 程式碼為: //求1-N的和 #include "stdio.h" int f(int n) { //定義函式f 出口為n等於1,否則將n與f(n-1)相
【C語言】用結構體陣列指標完成:有三個學生資訊,存放在結構體陣列中,要求輸出全部資訊
//用結構體陣列指標完成:有三個學生資訊,存放在結構體陣列中,要求輸出全部資訊 #include <stdio.h> struct Stu { int num; char name[2