当前位置:首页 » 编程语言 » 魔方阵c语言
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

魔方阵c语言

发布时间: 2022-01-26 01:20:21

c语言魔方阵

所谓的魔方距阵就是一种特殊的奇数阶方阵:它的行,列,对角线,上的数字之和都要相等,且方阵中的每一个数字都不相等,且数字的范围都在1到n*n之间.
我编的程序如下:
#include<stdio.h>
#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 e to the wrng input!please input it again!\n");
scanf("%d",&size);
}
for(i=0;i<size;i++)
for(j=0;j<size;j++)
square[i][j]=0;
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<size;i++)
{
for(j=0;j<size;j++)
printf("%d",square[i][j]);
printf("\n");
}
}

只能求奇数的魔方阵
#define N 20
main()
{
int a[N][N];
int n,i,j,r;
scanf("%d",&n);
for(i=0;i<N;i++) for(j=0;j<N;j++) a[i][j]=0;
i=0;
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<n;i++)
{
for(j=0;j<n;j++) printf("%4d",a[i][j]);
printf("\n");
}
}

② c语言输出魔方阵程序解释

首先魔方阵是一个奇数行列式方阵,它的一行,一列,对角线的和都相等。
建立魔方阵的第一步是确定1的位置,它是第一行的中间列,之后要确定其他位置的值,
问题1:if((i<1)&&(j>n))时,说明你确定的位置已经超出了魔方阵,所以要用i=i+2;j=j-1;把它拉回的魔方阵内,
问题2:判断第i行地j列的值是否等于0(即是否被填充),如果没填充,就填k,如果填充,再寻找下一个位置,
问题3:因为你的主函数main()前面的返回值为int,所以要提供返回值,那不是return=0,而是return 0;就是返回0,也可以返回1,这没关系的,如果不想要也行,那得把main()前面的int 改为void .

③ 魔方阵的C语言

代码一:
#include <stdio.h>
#define N 16 //这里可以修改N的值,并且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);/*可以输入小于等于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( );
}
}
代码二:(相对于代码一条理更清晰,更简单、更容易理解)
将1~n的平方这几个数构成一个n阶魔方阵。
算法:
依以下法则,你可以很快的写出奇数阶幻方!当然,这种写法只是其中一个答案,而不是唯一答案。
1)将1填入第一行中间;
2)将每个数填在前一个数的右上方。
3)若该位置超出最上行,则改填在最下行的对应位置;
4)若该位置超出最右列,则该填在最左列的对应行位置;
5)若某元素填在第一行最右列,下一个数填在该数同列的下一行;
6)若某数已填好,但其右上角已填了其他数据,则下一个数填在该数同列的下一行位置。
#include<stdio.h>
void main()
{
int a[15][15]={0},i,j,m,n,temp,M;
printf(请输入一个3~15的奇数: );
scanf(%d,&M);
i=0;
j=M/2;
a[i][j]=1;
for(temp=2;temp<=M*M;temp++)
{
m=i;
n=j;
i--;
j++;
if(i<0)
i=M-1;
if(j>M-1)
j=0;
if(a[i][j]!=0)
{
i=m+1,j=n;
a[i][j]=temp;
continue;
}
a[i][j]=temp;
}
printf(%d×%d魔方阵: ,M,M);
for(i=0;i<M;i++)
{
for(j=0;j<M;j++)
printf(%4d,a[i][j]);
printf( );
}
}
//(求4的倍数阶幻方)
void main()
{
int i,j,x,y,n,t,k=1;
int a[100][100];
printf(请输入魔方阵的阶数n );
scanf(%d,&n);
printf(输出为: );
if(n%4==0)
{
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
a[i][j]=k;
k++;
}
x=n-1;
for(j=0;j<n/2;j++,x--)
{
for(i=0;i<n;i++)
if(i%4!=j%4&&(i+j)%4!=3)
{
t=a[i][j];
a[i][j]=a[i][x];
a[i][x]=t;
}
}
x=n-1;
for(i=0;i<n/2;i++,x--)
{
for(j=0;j<n;j++)
if(i%4!=j%4&&(i+j)%4!=3)
{
t=a[i][j];
a[i][j]=a[x][j];
a[x][j]=t;
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf(%-4d,a[i][j]);
printf( );
}
}
else printf(输入错误 );
system(pause...);
}

④ C语言编程,输出魔方阵

程序代码:

#include&lt;stdio.h&gt;

#define N 16

int main()

{

int a[N][N]={0},i,j,k,p,n;

p=1;

while(p==1)

{

printf("Enter n(1~%d):",N);

scanf("%d",&n);

if((n!=0)&&(n&lt;N)&&(n%2!=0))

p=0;

}

i=n+1;

j=n/2+1;

a[1][j]=1;

for(k=2;k&lt;=n*n;k++)

{

i=i-1;

j=j+1;

if((i&lt;1)&&(j&gt;n))

{

i=i+2;

j=j-1;

}

else

{

if(i&lt;1)i=n;

if(j&gt;n)j=1;

}

if(a&lt;i&gt;[j]==0)a&lt;i&gt;[j]=k;

else

{

i=i+2;

j=j-1;

a&lt;i&gt;[j]=k;

}

}

for(i=1;i&lt;=n;i++)

{

for(j=1;j&lt;=n;j++)

printf("%4d",a&lt;i&gt;[j]);

printf(" ");

}

return 0;

}

(4)魔方阵c语言扩展阅读:

1.第一行中间一列的值为1。

所以用j=n/2+1确定1的列数,得出a[1][j]=1。

2.每一个数存放的行比前一个数的行数减1,列数加1。

行数用i=i-1确定,列数用j=j+1确定。

3.如果一个数行数为第一行,则下一个数行数为最后一行。

4.如果一个列行数为最后一列,则下一个数列数为第一列。

5.如果按上面的规则确定的位置上已有数,或上一个数是第一行最后一列,则把下一个数放在上一个数的下面。

⑤ c语言输出魔方阵

先上图:
A
BBB
CCCCC
DDDDDDD
CCCCC
BBB
A
再贴代码:
#include "stdio.h"
#include "conio.h"

main()
{ int i,j;

for(i=1;i<=7;i++)
{
for(j=1;j<=(i<=4?5-i:i-3);j++)
{
printf(" ");
}
for(j=1;j<=2*(i<=4?i:8-i)-1;j++)
{
printf("%c",i<=4?i+64:7-i+65);
}
printf("\n");
}
getch();
}

在写思路:
外层循环控制打印7行东西
里层循环用2个for,一个控制空格个数先递减后递增
一个控制字符从a变为d从d退回a
技巧:A的ascii编码是65。所以我上面的加的数字你分析下就明白了。

楼主好运!
力求最简短的代码给你完成!

⑥ C语言做的魔方阵

我奇怪你的语法怎么可能没错,int str[n][n];肯定是编译不通的,数组定义时长度必须是常量。给你一个我自己写的魔方阵算法吧,算作参考
#include<stdio.h>
#define N 100
void sort(int *p,int num)
{
int i;
int row,col;
row=0;
i=0;
col=num/2;
while(i<num*num)
{
if(*(p+row*num+col)!=0)
{row+=2;col--;}
*(p+row*num+col)=i+1;
if((row==0)&&(col==num-1))
{
row++;
}
else
{
if(row==0)
row=num-1;
else
row--;
if(col==num-1)
col=0;
else
col++;
}
i++;
}
}
void main()
{
int i,flag,a[N]={0};
int *p,n;
flag=1;
p=a;
while(flag==1)
{
printf("enter n(1~10)\n");
scanf("%d",&n);
if((n>0)&&(n<11)&&(n%2!=0)) flag=0;
}
sort(p,n);
for(i=0;i<n*n;i++)
{
printf("%5d",a[i]);
if((i+1)%n==0) printf("\n");
}
}

⑦ C语言 三阶魔方阵

我只想说你的算法错了,你还是去查一查魔方阵的算法吧;下面是n阶奇数魔方阵的程序,你好好看看吧:

#include<stdio.h>

voidmain()

{

intarray[16][16];

inti,j,k,m,n;

/*变量初始化*/

m=1;

while(m==1)

{

printf("请输入n(0<n<=15),n是奇数) ");

scanf("%d",&n);

/*判断n是否是大于0小于等于15的奇数*/

if((n!=0)&&(n<=15)&&(n%2!=0))

{

printf("矩阵阶数是%d ",n);

m=0;

}

}

/*数组赋初值为0*/

for(i=1;i<=n;i++)

for(j=1;j<=n;j++)

array[i][j]=0;

/*建立魔方阵*/

j=n/2+1;

array[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(array[i][j]==0)

array[i][j]=k;

else

{

i=i+2;

j=j-1;

array[i][j]=k;

}

}

/*输出魔方阵*/

for(i=1;i<=n;i++)

{

for(j=1;j<=n;j++)

printf("%5d",array[i][j]);

printf(" ");

}

}

输入3所得到的三阶魔方阵为:

⑧ 用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~%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;
}

⑨ 输出魔方阵C语言程序

下面运行通过,只不过不知道是否符合你的格式,代码如下:

#include<stdio.h>

voidmain()

{

intnum=-1;

intq=0,t[5];

inta=0,b=0,c=0,d=0,e=0;

inti=0,j=0;

intcount=0,temp=0;

charp;

printf("*********************************************** ");

printf("(1、赵**2、钱**3、孙**4、李**5、周**) ");

while(num!=6)

{

printf("请输入选号:");

scanf("%d",&num);

if(num==0)

q++;

else

switch(num)

{

case1:a++;break;

case2:b++;break;

case3:c++;break;

case4:d++;break;

case5:e++;break;

default:break;

}

}

count=a+b+c+d+e+q;

t[0]=a;

t[1]=b;

t[2]=c;

t[3]=d;

t[4]=e;

printf("hello ");

printf("赵有%d票 钱有%d票 孙有%d票 李有%d票 周有%d票 弃权有%d票 总共有%d人投票(包括弃权的) ",a,b,c,d,e,q,count);

for(i=0;i<5;i++)

for(j=0;j<5-i;j++)

if(t[j]<t[j+1])/*选票排序*/

{

temp=t[j];

t[j]=t[j+1];

t[j+1]=temp;

}

for(i=0;i<3;i++)/*输出前三甲*/

{

if(t[i]==a)

printf("赵是第%d名,共%d票 ",i+1,a);

if(t[i]==b)

printf("钱是第%d名,共%d票 ",i+1,b);

if(t[i]==c)

printf("孙是第%d名,共%d票 ",i+1,c);

if(t[i]==d)

printf("李是第%d名,共%d票 ",i+1,d);

if(t[i]==e)

printf("周是第%d名,共%d票 ",i+1,e);

}

}

运行结果如图:

⑩ n阶魔方阵C语言

据我所知,起码,n为偶数时n阶魔方阵是很难得到的,你的是不是奇数的魔方阵?