/* 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
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)