在下面的5×5魔方矩阵中,每一行、每一列、每一对角线上的元素之和都是相等的,试编写程序将这些魔方
3个回答
展开全部
C语言如下:
#include<stdio.h>
int main()
{
int a[100][100],x;/*初始化*/
int i,j,m,n,temp;
printf("输出魔方矩阵n=");
scanf("%d",&x);
while(x)
{
if(!(x%2))
{printf("你输入了偶数,很遗憾本程序将退出");
return 0;
}
else
{
for(i=0;i<x;i++)
for(j=0;j<x;j++)
a[i][j]=0;
i=0;
j=x/2;
a[i][j]=1;/*第一行中间填1*/
for(temp=2;temp<=x*x;temp++)/*循环24次,填剩余的24个数*/
{
m=i;
n=j;
i--;
j++;
if(i<0)
i=x-1;
if(j>x-1)
j=0;
if(a[i][j]!=0)
{i=m+1;
j=n;
}
a[i][j]=temp;
}
for(i=0;i<x;i++)
{
for(j=0;j<x;j++)
printf("%4d",a[i][j]);
printf("\n");
}
}
printf("输出魔方矩阵n=");
scanf("%d",&x);
}
return 0;
}
本程序只适合基数,解释如下:
N 为奇数时
(1) 将1放在第一行中间一列; (2) 从2开始直到n×n止各数依次按下列规则存放: 按 45°方向行走,如向右上 每一个数存放的行比前一个数的行数减1,列数加1 (3) 如果行列范围超出矩阵范围,则回绕。 例如1在第1行,则2应放在最下一行,列数同样加1; (4) 如果按上面规则确定的位置上已有数,或上一个数是第1行第n列时, 则把下一个数放在上一个数的下面。
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
#include<stdio.h>
int main()
{
int a[100][100],x;/*初始化*/
int i,j,m,n,temp;
printf("输出魔方矩阵n=");
scanf("%d",&x);
while(x)
{
if(!(x%2))
{printf("你输入了偶数,很遗憾本程序将退出");
return 0;
}
else
{
for(i=0;i<x;i++)
for(j=0;j<x;j++)
a[i][j]=0;
i=0;
j=x/2;
a[i][j]=1;/*第一行中间填1*/
for(temp=2;temp<=x*x;temp++)/*循环24次,填剩余的24个数*/
{
m=i;
n=j;
i--;
j++;
if(i<0)
i=x-1;
if(j>x-1)
j=0;
if(a[i][j]!=0)
{i=m+1;
j=n;
}
a[i][j]=temp;
}
for(i=0;i<x;i++)
{
for(j=0;j<x;j++)
printf("%4d",a[i][j]);
printf("\n");
}
}
printf("输出魔方矩阵n=");
scanf("%d",&x);
}
return 0;
}
本程序只适合基数,解释如下:
N 为奇数时
(1) 将1放在第一行中间一列; (2) 从2开始直到n×n止各数依次按下列规则存放: 按 45°方向行走,如向右上 每一个数存放的行比前一个数的行数减1,列数加1 (3) 如果行列范围超出矩阵范围,则回绕。 例如1在第1行,则2应放在最下一行,列数同样加1; (4) 如果按上面规则确定的位置上已有数,或上一个数是第1行第n列时, 则把下一个数放在上一个数的下面。
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
展开全部
??
这个问题不全啊。。。
这个问题不全啊。。。
追问
在下面的5×5魔方矩阵中,每一行、每一列、每一对角线上的元素之和都是相等的,试编写程序将这些魔方矩阵中的元素读到一个二维整型数组中,然后,检验其是否为魔方矩阵,并将其按如下格式显示到屏幕上。
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
追答
这个。。。
是属于计算机吧。。。
表示不会。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
magic(5);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询