拉丁方阵C语言编程

拉丁方阵C语言编程,第1张

#include <stdio.h>

/* stdio.h就是指“standard input&output”本语句指包含标准输入输出头文件 例如“printf”包含在其中 */#define N 6

/* 其中的“#”表示这是一条预处理命令。凡是以“#”塌让渗开头的均为预处理命令。

“define”为宏定义命令,即用6表示置换所有的宏名N,然后再进行编译。

可以简单理解成若程序中遇到N,即为6 */int main()

/* 定义main函数,main函数由系统直接调用,是程序执行的入口 */

{

int i, j

/* 定义整型变量i,j */

for (i = 1i <= Ni++)

{

for (j = ij <N + ij++)

printf("%3d"滑逗, (j - 1) % N + 1)

/* %3d 显示数值宽度为3格,靠右对齐 */

printf("\n")

/* 输出回车 */

}

return 0

}

/* ------------------------

重点介绍循环:

for (i = 1i <= Ni++)

由此可知i循环6次,每次取值分别为1、2、3、4、5、6;

for (j = ij <N + ij++)

由此可知j进入循环的初始值即为每次i的值,循环次数为N,即6次第一次进入循环 for (i = 1i <= Ni++)

i=1:

第 1 次进入循环 for (j = ij <N + ij++)

j=i , 即 j=1,

则 (j - 1) % N + 1 = 1

此时输出 " 1"注意:1前面有2空格,因为数值宽度为3格

第 2 次进入循环 for (j = ij <N + ij++)

此时 j=2,

则 (j - 1) % N + 1 = 2

此时输出 " 2"

第 3 次进入循环 for (j = ij <N + ij++)

此时 j=3,

则 (j - 1) % N + 1 = 3

此时输出 " 3" 第 4 次进入循环 for (j = ij <N + ij++)

此时 j=4,

则 (j - 1) % N + 1 = 4

此时输出 " 4"

第 5 次进入循环 for (j = ij <N + ij++)

此时 j=5,

则 (j - 1) % N + 1 = 5

此时输出 " 5"

第 6 次进入循环 for (j = ij <N + ij++)

此时 j=4,

则 (j - 1) % N + 1 = 6

此团脊时输出 " 6" 执行 printf("\n") 即回车换行 ,此时屏幕上显示“ 1 2 3 4 5 6”第二次进入循环 for (i = 1i <= Ni++)

i=2:

第 1 次进入循环 for (j = ij <N + ij++)

j=i , 即 j=2,

则 (j - 1) % N + 1 = 2

此时输出 " 2"

第 2 次进入循环 for (j = ij <N + ij++)

此时 j=3,

则 (j - 1) % N + 1 = 3

此时输出 " 3"

第 3 次进入循环 for (j = ij <N + ij++)

此时 j=4,

则 (j - 1) % N + 1 = 4

此时输出 " 4" 第 4 次进入循环 for (j = ij <N + ij++)

此时 j=5,

则 (j - 1) % N + 1 = 5

此时输出 " 5"

第 5 次进入循环 for (j = ij <N + ij++)

此时 j=6,

则 (j - 1) % N + 1 = 6

此时输出 " 6"

第 6 次进入循环 for (j = ij <N + ij++)

此时 j=7,

则 (j - 1) % N + 1 = 1

此时输出 " 1" 执行 printf("\n") 即回车换行 ,此时屏幕上显示 1 2 3 4 5 6

2 3 4 5 6 1感觉自己好傻,额,下面就不写啦,最后就是 1 2 3 4 5 6

2 3 4 5 6 1

3 4 5 6 1 2

4 5 6 1 2 3

5 6 1 2 3 4

6 1 2 3 4 5

----------------------------*/ 另外说一下,如果是正交拉丁方阵,6阶是不存在的!相信你知道的!呵呵

#include <stdio.h>#include <memory.h>

int num

int v[9][9]

void get_input()

{

int count

//float *v=NULL

char val_str[2048]

float mean_val=0

int i,j

printf("input N:"山袜)

scanf("%d",&num)

//printf("num=%d\n",num)

printf("input the values:\n")

for(i=0i<numi++)

{

fflush(stdin)

fgets(val_str,2048,stdin)

//printf("%s\n",val_str)

{

char *p

p = strtok(val_str, " \t")

count = 0

while (p&&count<num)

{

//printf("%s ",p)

if(count==0) {sscanf(val_str,"察空%d", &v[i][count++])}

p = strtok(NULL, " \t")

if(!p)break

sscanf(p,"%d", &v[i][count++])

}

//for(j=0j<numj++) printf("%d ",v[i][j])

//printf("\n"败唯瞎)

}

}

}

int isLatin()

{

//

int flag[9]

int i,j

for(i=0i<numi++)

{

for(j=0j<numj++)

printf("%d ", v[i][j])

printf("\n")

}

for(i=0i<numi++)

{

for(j=0j<numj++)

if(v[i][j] >num || v[i][j] <1) return 2

memset(flag,0,sizeof(int)*9)

for(j=0j<numj++)

{

if(flag[v[i][j]] == 1) return 3

else flag[v[i][j]] = 1

}

memset(flag,0,sizeof(int)*9)

for(j=0j<numj++)

{

if(flag[v[j][i]] == 1) return 4

else flag[v[j][i]] = 1

}

}

return 1

}

int main()

{

int r = 0

get_input()

r = isLatin(num)

if(r==1) printf("yes")

else printf("no")

return 0

}

网上找指陵的

#include <stdio.h>

#define MAXMATRIXSIZE 100

int MatrixPrint(int nMatrixSize)

void ClearMartix(int Martrix[MAXMATRIXSIZE][MAXMATRIXSIZE])

int MatrixCau(int Martrix[MAXMATRIXSIZE][MAXMATRIXSIZE],

int xPoint,int yPoint,int nMatrixSize )

bool CanEqualTo(int Martrix[MAXMATRIXSIZE][MAXMATRIXSIZE],

int xPoint,int yPoint,int nValue)

void PrintMatrix(int Martrix[MAXMATRIXSIZE][MAXMATRIXSIZE],int nMatrixSize)

int main(int argc ,char * argv[])

{

int nMatrixSize=1

printf("请输入拉丁方阵的大小:\n")

if(scanf("%d",&nMatrixSize) == 0 ||

nMatrixSize <= 0)

{

printf("你输入的不是散逗哪一个大于零的整数!\n")

return 1

}

else if(nMatrixSize >MAXMATRIXSIZE)

{

printf("你输入数超出了设定的最大值!\n")

return 1

}

int nSize = MatrixPrint(nMatrixSize)

printf("拉丁方阵的总数:%d\n",nSize)

return 0

}

int MatrixPrint(int nMatrixSize)

{

int nSize = 0

int MATRIX[MAXMATRIXSIZE][MAXMATRIXSIZE]

ClearMartix(MATRIX)

return MatrixCau(MATRIX,0,0,nMatrixSize)

}

void ClearMartix(int Martrix[MAXMATRIXSIZE][MAXMATRIXSIZE])

{

for(int i=0 i <MAXMATRIXSIZE i++)

{

for(int j=0 j <MAXMATRIXSIZE j++)

{

Martrix[i][j] = 0

}

}

}

void PrintMatrix(int Martrix[MAXMATRIXSIZE][MAXMATRIXSIZE],int nMatrixSize)

{

for(int i=0 i <nMatrixSize i++)

{

for(int j=0 j <冲码nMatrixSize j++)

{

printf("%3d",Martrix[i][j])

}

printf("\n")

}

printf("\n")

}

bool CanEqualTo(int Martrix[MAXMATRIXSIZE][MAXMATRIXSIZE],

int xPoint,int yPoint,int nValue)

{

for(int i=0 i <xPoint i++)

{

if(Martrix[yPoint][i] == nValue)

{

return false

}

}

for(int j=0 j <yPoint j++)

{

if(Martrix[j][xPoint] == nValue)

{

return false

}

}

return true

}

int MatrixCau(int Martrix[MAXMATRIXSIZE][MAXMATRIXSIZE],

int xPoint,int yPoint,int nMatrixSize )

{

int nSize = 0

for(int i = 1 i <= nMatrixSize i++ )

{

if(CanEqualTo(Martrix,xPoint,yPoint,i))

{

Martrix[yPoint][xPoint] = i

if(xPoint ==nMatrixSize-1 &&yPoint == nMatrixSize-1)

{

PrintMatrix(Martrix,nMatrixSize)

nSize += 1

continue

}

if(xPoint == nMatrixSize-1 )

{

nSize += MatrixCau(Martrix,0,yPoint+1,nMatrixSize)

}

else

{

nSize += MatrixCau(Martrix,xPoint+1,yPoint,nMatrixSize)

}

}

}

return nSize

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12510999.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存