拉丁方阵 课程设计Word文档下载推荐.docx
《拉丁方阵 课程设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《拉丁方阵 课程设计Word文档下载推荐.docx(18页珍藏版)》请在冰豆网上搜索。
213
132
123
212
输入样例2
5
43521
54132
15243
21354
32415
231
312
0
输出样例
1
输入格式:
输入包含多组数据。
每组数据第一行为正整数n,表示方阵的大小。
其后n行,每行有n个1到n之间的整数,整数之间恰有一个空格,表示方阵的内容。
输入保证1≤n≤100,输入以n=0结束,不要处理这个数据。
输出格式:
每组数据对应于一行输出。
如果输入是拉丁方阵,但不是标准型则输出1;
如果输入是标准型则输出2;
如果输入不是拉丁方阵则输出0
二.问题分析
本程序要求编写一个程序读入一个方阵,判断其是否为拉丁方阵,如果输入是拉丁方阵,但不是标准型则输出1;
如果输入不是拉丁方阵则输出0。
完成这些功能需要定义一个长度为n的数组边长,然后定义一个100行100列的数组用来存放矩阵。
1.数据的输入形式和输入值的范围:
输入保证1≤n≤100,且都为整形。
2.结果的输出形式:
整形,如果输入是拉丁方阵,但不是标准型则输出1;
如果输入不是拉丁方阵则输出0
3.测试数据:
三.概要设计
1)为了实现上述功能,需要:
将方阵保存在100行100列的数组中。
判断方阵类型,第一行和第一列是否有序,每行每列是否有重复的数据,数组是否越界超过n。
判断每行的元素是否在第一行中和每列的元素是否在第一列中。
2)本函数包含的函数
Voidmain()
四.详细设计
1)定义item=0作为函数的while循环的条件,定义一个行100、列100数组。
2)给方阵添加数据
for(i=0;
i<
n;
i++)
for(j=0;
j<
j++)
scanf("
%d"
&
a[i][j]);
3)输出方阵
printf("
输出矩阵\n"
);
for(i=0;
i++){
printf("
\n"
%d"
a[i][j]);
}
4)判断行、列相等
//判断列相等
for(i=0;
{
for(j=i;
{
for(k=j+1;
k<
n-1;
k++)
if(a[i][j]==a[i][k])
{flag1=0;
break;
if(flag1==0)break;
}
if(flag1==0)break;
}
//判断列相等
if(a[j][i]==a[k][i])
if(flag1==0)break;
5)判断有序
i++)//第一行有序
if(a[0][i]>
=a[0][i+1])
{flag2=0;
for(j=0;
j++)//第一列有序
if(a[j][0]>
=a[j+1][0])
6)输出判断的方阵类型
输出方阵的类型\n"
if(flag1==1&
&
flag2==1&
flag3==1)
2\n"
flag3==1&
flag2==0)
1\n"
if(flag1==0||flag3==0)
0\n"
继续输入0否则1\n"
scanf("
item);
附录:
源程序
#include<
stdio.h>
stdlib.h>
voidmain()
{
intitem=0;
while(item==0)
{
0:
不是拉丁方阵\n"
1:
拉丁方阵\n"
2:
标准拉丁方阵\n"
intn,i,j,k,flag1=1,flag2=1,flag3=1;
inta[100][100];
printf("
请输入方阵的边长:
//输入方阵边长
scanf("
n);
请输入方阵中的%d个数据\n"
n*n);
i++)//给方阵添加数据
i++){//输出方阵
//判断行相等
//判断有序
//每行元素都在第一行元素中
for(i=1;
for(j=0;
for(k=0;
if(a[i][j]==a[0][k])
break;
if(k==n){flag3=0;
break;
if(flag3==0)break;
//每列元素都在第一行元素中
if(a[j][i]==a[0][k])
//判断输出方阵类型
}
五.测试结果及调试分析