用c语言编写n阶魔方阵.谢谢了!!!

作者&投稿:仍径 (若有异议请与网页底部的电邮联系)
n阶魔方阵C语言~

/*15 阶内奇数魔方阵C程序*/
#include
main()
{
int a[16][16],i,j,m,n;
printf("
请输入阶数");
IN: scanf("%d",&n);
if (n>15 ) goto IN ;
if(0==n%2) n++;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
a[i][j]=0;
i=1; j=n/2 +1;
a[i][j]=1;
for(m=2;m<=n*n;m++)
{ i--; j++;
if (j>n && i<1)
{ i=2 ; j=n ; }
else
if(i<1) i=n ;
if(j>n) j=1;
if (a[i][j]!=0)
{
i=i+2; j= j-1;}
a[i][j]=m;
}
for(i=1;i<=n;i++)
{ for(j=1;j<=n;j++)
printf(" %4d",a[i][j]);
printf("
");
}
getch();
}

Console.WriteLine("请输入魔方阵的阶数(奇数):");
int x = Convert.ToInt32(Console.ReadLine());
int[,] a = new int[x, x];
a[0, (x + 1) / 2 - 1] = 1;
int j = 0, k = (x + 1) / 2 - 1;
for (int i = 2; i <= x * x; i++)
{
if ((i - 1) % x == 0)
{
a[j + 1, k] = i;
j = j + 1;
}
else if (k == 0)
{
if (j != 0)
{
a[j - 1, x - 1] = i;
j = j - 1;
k = x - 1;
}
else
{
a[x - 1, x - 1] = i;
j = x - 1;
k = x - 1;
}
}
else if (j == 0)
{
a[x - 1, k - 1] = i;
j = x - 1;
k = k - 1;
}
else
{
a[j - 1, k - 1] = i;
j -= 1;
k -= 1;
}
}
for (int q = 0; q < x; q++)
{
for (int w = 0; w < x; w++)
{
Console.Write(" {0}",a[q, w]);
}
Console.WriteLine();
}
Console.ReadKey();

下面这个程序原本是从百度百科里找到的,不过发现百科里面那个程序原来有误,修改后终于可以了,给你,希望有帮助!!!

#include <stdio.h>
#define N 16 //N可修改

int main()
{
int a[N][N]={0},i,j,k,p,m,n;
p=1;
while(p==1)
{
printf("Enter n(1~%d): ",N-1);
scanf("%d",&n);
if((n!=0)&&(n<N)&&(n%2!=0))
p=0;
}
i=n+1;
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");
}

return 0;
}

http://zhidao.baidu.com/question/6808900.html?si=2


c语言 4阶魔方数(每行每列对角线和都相等,每个数不一样从1到16),推广...
\/ 填魔术方阵的方法以奇数最为简单,第一个数字放在第一行第一列的正中央,然后向右(左)上填,如果右(左)上已有数字,则向下填,如下图所示:一般程式语言的阵列索引多由0开始,为了计算方便,我们利用索引1到n的部份,而在计算是向右(左)上或向下时,我们可以将索引值除以n值,如果得到余数为1就...

用matlab做一个产生魔方阵的程序
这个简单的很啊,你既然知道是magic函数可以实现这功能就好办了。直接在matlab里输入命令open magic就可以打开magic函数了,里面自然就是代码咯 呵呵 如果你要的是C代码的话推荐你到图书馆看本书《C语言算法速查手册》里面有滴,下面的是MATLAB里的具体函数了 function M = magic(n)MAGIC Magic square...

求C语言高手分析。关于魔方阵的程序 请问为什么会出现错误答案,是不...
第一处:a=(int *)malloc(max+max);内存分配的单位不对,max+max其实就是max*2,就是说一个int分配2字节,这在32位计算机上是不对的,应该改为:a=(int *)malloc(max*sizeof(int));第二处:if(i<0){ i=3; \/*应该改为n-1*\/ } 其中,i=3改为i=n-1;第三处:for(i=0;i<...

c语言 如何求三阶魔方阵,最好带注释
include <stdio.h> include <math.h> define N 100 \/*N可以改变*\/ void main(){ int n,p=1;void jici(int n);void sioubeishu(int n);void oubeishu(int n);void sijibeishu(int n);void elseoushu(int n);printf("***说明(本程序用于输出任意数阶次的魔方矩阵,其行,列,...

C语言设计选择菜单
printf("***\\n");printf(" 1、奇数魔方阵 \\n");printf(" 2、素数魔方阵 \\n");printf(" 0、退出 \\n");printf("***\\n");printf(" 请输入选项: \\n");int select;scanf("%d",&select);switch(select){ case 1:JiShu();break;case 2:SuShu();...

c语言问题。
p=&x[1][1]; 是“语句”,你的程序中它不是语句,是声明,要看成“声明和初始化”。即要看成: int *p=&x[1][1];意思是 声明 p 是int型指针,指向 下标变量 x[1][1] 的地址。&x[1][1] 是 x[1][1] 的地址,即2维数组 x 的 第2行第2列 的元素 9 8 7 \/\/第...

C语言直接打印出3*3魔方矩阵
{ 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...

已知一个5X5的矩阵,用C语言编写一个验证该矩阵是否为魔方,魔方的条件为...
include"stdio.h"void main(){ int magic[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}};int i,j;int sum;printf("该矩阵为:\\n");for(i=0;i<5;i++){ for(j=0;j<5;j++)printf("%4d",magic[i][j]);printf...

如何用C语言编写幻方?多谢回答
for(i=1;i<=n;i++){ for(j=1;j<=n;j++)cout<<a[i][j]<<" ";cout<<endl;} } \/*C_ban 所谓的魔方距阵就是一种特殊的奇数阶方阵:它的行,列,对角线,上的数字之和都要相等,且方阵中的每一个数字都不相等,且数字的范围都在1到n*n之间.我编的程序如下:\/ include<stdio...

请哪位牛人告诉我怎样用C语言程序复原3阶魔方的
对,先要了解算法最好 给你个吧,不过是有限阶的(用vc做的)include <stdio.h> void main(){ int i,j,n,k,u,t,m,x,y,a[100][100];printf("please input n:");scanf("%d",&n);printf("\\n");if(n>2&&(n%2)!=0){ for(i=0;i<n;i++)for(j=0;j<n;j++)a[i][j...

罗山县19292172979: 用c语言编写n阶魔方阵.谢谢了!!! -
井子来福: 下面这个程序原本是从百度百科里找到的,不过发现百科里面那个程序原来有误,修改后终于可以了,给你,希望有帮助!!!#include <stdio.h> #define N 16 //N可修改int main() { int a[N][N]={0},i,j,k,p,m,n; p=1; while(p==1) { printf("Enter n(1...

罗山县19292172979: 求一个n阶魔方阵的算法用标准c语言的风格来做的 -
井子来福: 对平面魔方的构造,分为三种情况:N为奇数、N为4的倍数、N为其它偶数(4n+2的形式) ⑴ N 为奇数时,最简单 (1) 将1放在第一行中间一列; (2) 从2开始直到n*n止各数依次按下列规则存放: 按 45°方向行走,如向右上 每一个数存放的行...

罗山县19292172979: c语言中的n阶方阵怎嘛做 -
井子来福: C语言中int型的数值非常的小,最大的范围也只在[-2^31 , 2^31 -1],所以使用int类型最大只能表示13的阶乘而已,使用范围更大的double才是王道./* Note:Your choice is C IDE */#include "stdio.h" void main() { int i,n,flg; double num=1; printf("...

罗山县19292172979: n阶魔方阵C语言 -
井子来福: /*15 阶内奇数魔方阵C程序*/#include<stdio.h> main() { int a[16][16],i,j,m,n; printf("\n请输入阶数"); IN: scanf("%d",&n); if (n>15 ) goto IN ; if(0==n%2) n++; for(i=1;i<=n;i++) for(j=1;j<=n;j++) a[i][j]=0; i=1; j=n/2 +1; a[i][j]=1; for(m=2;m<=n*n;m++) { ...

罗山县19292172979: 用C语言编写一个程序 输出魔方阵 -
井子来福: #include #define n 16 //这里可以修改n的值 int main() { int a[n][n],i,j,k,p,m,n; p=1; while(p==1) /*要求阶数为1~15的商数*/ { printf("enter n(n=1~15):"); //可以输入小于等于n-1的整数 scanf("%d",&n); if((n!=0)&&(n<=n-1)&&(n%2!=0)) p=0; } for...

罗山县19292172979: 用c语言写一个输出魔方阵的程序. -
井子来福: #include #define N 15 void main() {a:;int a[N][N],t;int i,j,m,n,c,b,k=1;printf("输入魔方阵阶数(不超过%d):",N);scanf("%d",&t);if(t<2||t>17){printf("输入不合法,请重新输入!\n\n");goto a;}if(t%2==0){printf("偶...

罗山县19292172979: 用C语言编写一个程序 输出魔方阵 -
井子来福: #include int main(){ int a[3][3]; int q,b,c,d; int i,j; int k; scanf("%d %d %d", a[0][0]=q; a[0][1]=b; a[0][2]=c; d=q+b+c;scanf("%...

罗山县19292172979: N阶魔方怎么用C语言编写
井子来福: #包括&lt;stdio.h&gt; #定义N 16 / /在这里,您可以N的值 廉政的main() { ?诠释一个[N] [N],I,J,K,P,M,N; P = 1; 而(== 1)/ *顺序是必需的从1到15的商数* / ?的printf(“请输入n(n = 1到15):”); / /可以输入小于或等于N-1的整数 scanf函数(...

罗山县19292172979: 用c语言怎么打出奇数阶的魔方阵? -
井子来福: #include #define N 5 void main() { int s[N][N],a,b,i; for(a=0,b=(N/2),i=2,s[a][b]=1;i<=N*N;i++) { if(s[a][b]%N==0) a++; else { if(a-1<0) a=N-1; else a--; if(b+1==N) b=0; else b++; } s[a][b]=i; } for(a=0;a{for(b=0;b printf("%-4d",s[a][b]);printf("\n");} }

罗山县19292172979: C语言中按照以下方阵示例生成一个由自然数1~N的2次方组成的N阶方阵 写两段程序 在线等啊谢啦 -
井子来福: 第一个#include int a[100][100]; int main() { int i,j,k,n; scanf("%d", &n); memset(a,-1,sizeof(a)); //将数组设置为-1 for (i=1;i for (j=1;j a[i][j]=0; k=2; i=2; a[1][1]=1; j=1; while (1){ if (a[i][j] == -1) { break; } while (a[i][j]==0) a[i--][j++]=k++;i++; while (a[i][j]=...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网