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

用c语言编写魔方阵视频

发布时间: 2022-08-10 09:56:54

c语言:输出魔方阵

魔方阵,古代又称“纵横图”,是指组成元素为自然数1、2…n的平方的n×n的方阵,其中每个元素值都不相等,且每行、每列以及主、副对角线上各n个元素之和都相等。
如3×3的魔方阵:
8 1 6
3 5 7
4 9 2
魔方阵的排列规律如下:
(1)将1放在第一行中间一列;
(2)从2开始直到n×n止各数依次按下列规则存放;每一个数存放的行比前一个数的行数减1,列数加1(例如上面的三阶魔方阵,5在4的上一行后一列);
(3)如果上一个数的行数为1,则下一个数的行数为n(指最下一行);例如1在第一行,则2应放在最下一行,列数同样加1;
(4)当上一个数的列数为n时,下一个数的列数应为1,行数减去1。例如2在第3行最后一列,则3应放在第二行第一列;
(5)如果按上面规则确定的位置上已有数,或上一个数是第一行第n列时,则把下一个数放在上一个数的下面。例如按上面的规定,4应该放在第1行第2列,但该位置已经被占据,所以4就放在3的下面;

Ⅱ 用C语言,输出“魔方阵”

#include<stdio.h>
void main()
{
int a[16][16],i,j,k,n;
printf("enter n(n=1 to 15):");
scanf("%d",&n);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
a[i][j]=0; //一定要初始化数组,不然就输不出结果
if(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) //到了第一行,则其下一个元素在第n行
i=n;
if(j>n) //到了最后一列,则下一个元素转到第一列
j=1;
}
if(a[i][j]==0) //如果下一个元素还没有被填充,已定的规律由大到小的顺序进行输出
a[i][j]=k;
else
{
i=i+2; //由于原来i减去了1,所以现在要加上1,总共要回去2
j=j-1; //由于原来j加上了1,所以现在要减去1
a[i][j]=k;
}
}
for(i=1;i<=n;i++) //矩阵的输入模块
{
for(j=1;j<=n;j++)
printf("%5d",a[i][j]);
printf("\n");
}
}

Ⅲ 请编程达人用c语言编写一个程序输出魔方阵

#include <stdio.h>
#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(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");
}
return 0;
}

Ⅳ 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语言 魔方阵

一个求奇数阶魔方阵的程序,步骤如下:
(1)将1放在第一行中间一列;
(2)从2开始直到n×n止各数依次按下列规则存放;每一个数存放的行比前一个数的行数减1,列数加1(例如上面的三阶魔方阵,5在4的上一行后一列);
(3)如果上一个数的行数为1,则下一个数的行数为n(指最下一行);例如1在第一行,则2应放在最下一行,列数同样加1;
(4)当上一个数的列数为n时,下一个数的列数应为1,行数减去1。例如2在第3行最后一列,则3应放在第二行第一列;
(5)如果按上面规则确定的位置上已有数,或上一个数是第一行第n列时,则把下一个数放在上一个数的下面。例如按上面的规定,4应该放在第1行第2列,但该位置已经被占据,所以4就放在3的下面;

Ⅵ 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;

}

(6)用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语言编写

/*N阶魔方阵*/
//#include
#include
#define N 99 //最大阶数,根据需求而改变此值。试了一下阶数为1023和1024,大约要一分钟才能显示完毕.

int a[N][N];//定义全局数组
void mfz1(int);
void mfz2(int n);
void main()
{
int n;
cout<<"Please Input the Order of the Magic Matrix:"< cin>>n;
if (n%2!=0) mfz1(n);
if (n%4==0) mfz2(n);//写出了阶数为4的倍数的函数,主函数做修改
for (int i=1;i<=n;i++)
{
for (int j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout< }

}

void mfz1(int n) //产生奇数阶魔方矩阵
{
int i,j,i0,j0,x;//定义数组下标
int flag[N][N];
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
flag[i][j]=0;
i=1;
j=n/2+1;
a[i][j]=1;
flag[i][j]=1;
for(x=2;x<=n*n;x++)
{
i0=i;
j0=j;
i=(--i)>0?i:n;
j=(++j)>n?1:j;

if(!flag[i][j])
{
a[i][j]=x;
flag[i][j]=1;
}
else
{
a[i0+1][j0]=x;
flag[i0+1][j0]=1;
i=i0+1;
j=j0;
}

}

}

void mfz2(int n) //产生能被4整除的偶数阶魔方阵
{int i,j;
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
if ((i<=n/2 && j<=n/2 && (i+j)%2)||(i>n/2 && j>n/2 && (i+j)%2)
||(i<=n/2 && j>n/2 && !((i+j)%2))||(i>n/2 && j<=n/2 && !((i+j)%2)))
a[i][j]=n*n+1;
else a[i][j]=0;
int sum=1;
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
{if (a[i][j]) a[i][j]=a[i][j]-sum;
else a[i][j]=sum;
sum++;}
}
其中奇数阶部分由本人编写,特此声明。
不足之处:偶数阶还差一种情况,本人正在考虑中...
编译环境:VC++6.0 , 如果要在TC下编译请:
(1)将输入输出语句cout/cin改成相应的printf/scanf即可(不过还要自己加上I/O格式哦!)
(2)将变量定义都置于函数体的开头部分。

Ⅷ 用C语言输出“魔方阵”

这个是17以内奇数阶和四阶的!!!
#include<stdio.h>
void main()
{
int x,i,j,fl,k=0,a[18][18]={0};
printf("请输入层数:");
scanf("%d",&x);
if((x!=4)&&(x%2==0)||(x<0)&&(x>18))
fl=0;
else if(x==4)
{
for(i=0;i<x;i++)
{
for(j=0;j<x;j++)
{
k+=1;
a[i][j]=k;
}
}
for(i=0;i<x;i++)
for(j=0;j<x;j++)
{
if(((i==j)&&(i<2))||((j==x-i-1)&&(j>2)))
{
k=a[i][j];a[i][j]=a[x-i-1][x-j-1];a[x-i-1][x-j-1]=k;
}
}
}
else
{
i=0;
j=x/2;
a[0][j]=1;
for(k=2;k<=x*x;k++)
{
i=i-1;
j=j+1;
if(i<0&&j>x-1)
{
i=i+1;
j=j-1;
}
else
{
if(i<0)i=x-1;
if(j>x-1)j=0;
}
if(a[i][j]==0)
a[i][j]=k;
else
{
i=i+2;
j=j-1;
a[i][j]=k;
}
}
}
if(fl==0)
printf("无此魔方阵!\n");
else
{
for(i=0;i<x;i++)
{
for(j=0;j<x;j++)
printf("%4d",a[i][j]);
printf("\n");
}
}
}

Ⅸ 用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语言做的魔方阵

我奇怪你的语法怎么可能没错,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");
}
}