C语言直接打印出3*3魔方矩阵

直接打印出来就行了,不用输入一个3,再打印出来。
不好意思,你的答案不对哦!不是全部打印3,是这样的:
8 1 6
3 5 7
4 9 2

#include <stdio.h>
main()
{ int a[16][16],i,i,k,p,m,n;
p=1;
while(p==1) /*要求阶数为1~15的商数*/
{ printf("Enter n(n=1~15):");
scanf("%d",&n);
if((n!=0)&&(n<=15)&&(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++)
printf("%4d",a[i][j]);
printf("\n");
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-01-05
#include<stdio.h>
void main()
{int i,n;
for(i=1;i<=3;i++)
{
for(n=1;n<=3;n++)
printf("3");
printf("\n");
}
}直接出3的;
#include<stdio.h>
void main()
{int i,n,a;
printf("please put in a number %d");
scanf("%d",&a);
if(a==3){
for(i=1;i<=3;i++)
{
for(n=1;n<=3;n++)
printf("3");
printf("\n");
}
}
else
printf("please put in number 3");
}
判断是不是3的,希望能帮上忙 一起学习 呵呵~~
第2个回答  2011-01-05
这个是Matlab中魔方阵的程序,可以参考下,把几个语句改动下即可
function M = magic(n)
%MAGIC Magic square.
% MAGIC(N) is an N-by-N matrix constructed from the integers
% 1 through N^2 with equal row, column, and diagonal sums.
% Produces valid magic squares for all N > 0 except N = 2.

% Copyright 1984-2002 The MathWorks, Inc.
% $Revision: 5.15 $ $Date: 2002/04/15 03:44:23 $

% Historically, MATLAB's magic was a built-in function.
% This M-file uses a new algorithm to generate the same matrices.

n = floor(real(double(n(1))));

% Odd order.
if mod(n,2) == 1
[J,I] = meshgrid(1:n);
A = mod(I+J-(n+3)/2,n);
B = mod(I+2*J-2,n);
M = n*A + B + 1;

% Doubly even order.
elseif mod(n,4) == 0
[J,I] = meshgrid(1:n);
K = fix(mod(I,4)/2) == fix(mod(J,4)/2);
M = reshape(1:n*n,n,n)';
M(K) = n*n+1 - M(K);

% Singly even order.
else
p = n/2;
M = magic(p);
M = [M M+2*p^2; M+3*p^2 M+p^2];
if n == 2, return, end
i = (1:p)';
k = (n-2)/4;
j = [1:k (n-k+2):n];
M([i; i+p],j) = M([i+p; i],j);
i = k+1;
j = [1 i];
M([i; i+p],j) = M([i+p; i],j);
end
第3个回答  2011-01-05
右行算法
Enter n(n=1~15):7
30 39 48 1 10 19 28
38 47 7 9 18 27 29
46 6 8 17 26 35 37
5 14 16 25 34 36 45
13 15 24 33 42 44 4
21 23 32 41 43 3 12
22 31 40 49 2 11 20
Press any key to continue

左行算法
Enter n(n=1~15):7
28 19 10 1 48 39 30
29 27 18 9 7 47 38
37 35 26 17 8 6 46
45 36 34 25 16 14 5
4 44 42 33 24 15 13
12 3 43 41 32 23 21
20 11 2 49 40 31 22
Press any key to continue

其实其中任意一种算法算出来以后从中间作一个轴对称转换也可以得到另外一种
核心代码:

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<1))
{
i=i+2;
j=j+1;
}
else
{
if(i<1) i=n;
if(j<1) j=n;
}
if(a[i][j]==0) a[i][j]=k;
else
{
i=i+2;
j=j+1;
a[i][j]=k;
}
}
相似回答