#include "stdio.h"
const int MAX=5;
void multi(int a[MAX][MAX],int b[MAX][MAX],int c[MAX][MAX])
{
int i,j,k;
for(i=0;i
for(j=0;j
for(k=0;k
c[i][j]+=a[i][k]*b[k][j];
}
}
}
}
void out(int x[MAX][MAX],int n)//输入矩阵
{
int i,j;
for(i=0;i
for(j=0;j
puts("");
}
}
void read(int x[MAX][MAX],int n)
{
int i,j;
for(i=0;i
int main()
{
int a[MAX][MAX],b[MAX][MAX],c[MAX][MAX];
read(a,MAX);//读入矩阵
read(b,MAX);
out(c,MAX);
return 0;
}
这是幻方吧、、、、、、//分析:魔方阵有如下规律:
// 1:自然数1总是在方阵第一行当中一列上。
// 2:后续的自然数在当前数的右上方,
// 1)如果是在第一行则行数变为第n行列数加1 ;
// 2)如果是在最后一列,行数减1,列数为第1行。
// 3)如果后续的数所处位置已有数,则行数加1,列数不变。
/******************************************************************************************************************************
巧填奇数阶幻方(魔方阵)[转]2007-01-03 17:57 一、什么叫幻方?
(通俗点说)把一些有规律的数填在纵横格数都相等的正方形图内,使每一行、每一列和每一条对角线上各个数之和都相等。这样的方阵图叫做幻方。
幻方又分为奇数阶幻方和偶数阶幻方。奇数阶幻方是指横行、竖列都是单数(即3、5、7、9……)的方阵图。偶数阶幻方是指横行、竖列都是双数(即4、6、8、10……)的方阵图。
二、奇数阶幻方的填法。
奇数阶幻方中最简便的一种就是三阶幻方,又称“九宫图”。
平常我们遇到这类题都是用分析、分组、尝试的方法推出,这种方法较麻烦,如果是五阶幻方、七阶幻方就更困难了。
有一种方法不仅能很快地填出三阶幻方,还能很快地填出五阶幻方、七阶幻方、九阶幻方……那就是“口诀法”
口 诀
“1”坐边中间,斜着把数填;
出边填对面,遇数往下旋;
出角仅一次,转回下格间。
注意:
(1)这里的“1”,是指要填的这一列数中的第一个数。
(2)“1”坐边中间,指第一个数要填在任何一边的正中间的空格里。
(3)从1到2时,必须先向边外斜(比如:第一个数填在上边的正中间,填第二个数时,要向左上方或右上方斜),填后面的数时也要按照同样的方向斜。
*******************************************************************************************************************************/
#include
using namespace std;
void main()
{
int a[32][32],i,j,k,p,n;
p=1;
while(p==1)
{
cout<<"Enter n(n=1~25):";
cin>>n;
if((n!=0)&&(n<=25)&&(n%2!=0))
p=0;
}
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
a[i][j]=0;
j=n/2+1;
a[1][j]=1;
for(k=2;k<=n*n;k++)
{
i=i-1;
j=j+1;
if((i<1)&&(j>n))
{
i=i+2;
j=j-1;
}
else
{
if(i<1)
i=n;
if(j>n)
j=1;
}
if(a[i][j]==0)
a[i][j]=k;
else
{
i=i+2;
j=j-1;
a[i][j]=k;
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
cout<cout<
}
/*C_ban*
所谓的魔方距阵就是一种特殊的奇数阶方阵:它的行,列,对角线,上的数字之和都要相等,且方阵中的每一个数字都不相等,且数字的范围都在1到n*n之间.
我编的程序如下:
*/
#include
#define N 15
main()
{
int i,j,row,cloum,size,square[N][N],count;
clrscr();
printf("please enter the square size(odd && <=15):\n");
scanf("%d",&size);
while(size%2==0||size>15||size<3)
{
printf("error due to the wrng input!please input it again!\n");
scanf("%d",&size);
}
for(i=0;i
i=0;j=(size-1)/2;
square[i][j]=1;
for(count=2;count<=size*size;count++)
{
row=i-1<0?(size-1):(i-1);
cloum=j-1<0?(size-1):(j-1);
if(square[row][cloum])
i=(++i)%size;
else
{i=row;
j=j-1<0?(size-1):(j-1);
}
square[i][j]=count;
}
printf("the %d square is:\n",size);
for(i=0;i
for(j=0;j
printf("\n");
}
}
只能求奇数的魔方阵
#define N 20
main()
{
int a[N][N];
int n,i,j,r;
scanf("%d",&n);
for(i=0;i
j=n/2;
a[i][j]=1;
for (r=2;r<=n*n;r++)
if (a[(i+n-1)%n][(j+1)%n]==0)
{i=(i+n-1)%n;j=(j+1)%n;a[i][j]=r;}
else
{i=(i+1)%n;a[i][j]=r;}
for(i=0;i
for(j=0;j
}
}
这是以前别人写的,你参考一下!
#include
#include
#define RA 5 /*矩阵A的行数*/
#define CA 5 /*矩阵A的列数*/
#define RB 5 /*矩阵B的行数*/
#define CB 5 /*矩阵B的列数*/
main()
{
int A[RA][CA];
int B[RB][CB];
int C[RA][CB];
int i,j,k;
printf("1");
/*随机生成矩阵A*/
randomize();
for(i=0;i
/*随机生成矩阵B*/
randomize();
for(i=0;i
/*输出矩阵A*/
printf("\nMatrix A");
for(i=0;i
for(j=0;j
printf("\n");
}
/*输出矩阵B*/
printf("\nMatrix B");
for(i=0;i
for(j=0;j
printf("\n");
}
/*两个矩阵相乘*/
for(i=0;i<=RA;i++)
for(j=0;j
C[i][j]=0;
for(k=0;k
}
/*输出结果矩阵*/
printf("\nMatrix A*B\n");
for(i=0;i
for(j=0;j
printf("\n");
} getch();
}
以前做过一个矩阵计算器,可以实现矩阵相乘,矩阵与常量相乘,矩阵消减和转置,矩阵的闭包计算,有需要的话留邮箱。