首页 > 编程知识 正文

c语言魔方游戏,c++魔方程序

时间:2023-12-29 20:31:53 阅读:330867 作者:TXJT

本文目录一览:

教你如何使用C语言编写简单小游戏

编写程序,实现如下表所示的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  

5-魔方阵

问题分析

所谓“n-魔方阵”,指的是使用1〜n2共n2个自然数排列成一个n×n的方阵,其中n为奇数;该方阵的每行、每列及对角线元素之和都相等,并为一个只与n有关的常数,该常数为n×(n2+1)/2。

例如5-魔方阵,其第一行、第一列及主对角线上各元素之和如下:

第一行元素之和:17+24+1+8+15=65

第一列元素之和:17+23+4+10+11=65

主对角线上元素之和:17+5+13+21+9=65

而 n×(n2+1)/2=5×(52+1)/2=65 可以验证,5-魔方阵中其余各行、各列及副对角线上的元素之和也都为65。

假定阵列的行列下标都从0开始,则魔方阵的生成方法为:在第0行中间置1,对从2开始的其余n2-1个数依次按下列规则存放:

(1) 假定当前数的下标为(i,j),则下一个数的放置位置为当前位置的右上方,即下标为(i-1,j+1)的位置。

(2) 如果当前数在第0行,即i-1小于0,则将下一个数放在最后一行的下一列上,即下标为(n-1,j+1)的位置。

(3) 如果当前数在最后一列上,即j+1大于n-1,则将下一个数放在上一行的第一列上,即下标为(i-1,0)的位置。

(4) 如果当前数是n的倍数,则将下一个数直接放在当前位置的正下方,即下标为(i+1,j)的位置。

算法设计

在设计算法时釆用了下面一些方法:

定义array()函数,array()函数的根据输入的n值,生成并显示一个魔方阵,当发现n不是奇数时,就加1使之成为奇数。

使用动态内存分配与释放函数malloc()与free(),在程序执行过程中动态分配与释放内存,这样做的好处是使代码具有通用性,同时提高内存的使用率。

在分配内存时还要注意,由于一个整型数要占用两个内存,因此,如果魔方阵中要存放的数有max个,则分配内存时要分配2*max个单元,从而有malloc(max+max)。在malloc()函数中使用max+max而不是2*max是考虑了程序运行的性能。

显然应该使用二维数组来表示魔方阵,但虽然数组是二维形式的,而由于内存是一维线性的,因此在存取数组元素时,要将双下标转换为单个索引编号。在程序中直接定义了指针变量来指向数组空间,即使用malloc()函数分配的内存。

C语言做的魔方阵

下面是一个打印奇数阶魔方阵的程序:

#includestdio.h

int main()

{int n=0,i,j,k=1,p,q,a[20][20]={0};

while(!(n%2))

{printf("请输入一个小于20的奇数:");

scanf("%d",n);

}

i=0;

j=n/2;

for(p=0;pn;p++)

{for(q=0;qn;q++)

{if(q0)

{i=(i+n-1)%n;

j=(j+1)%n;

}

a[i][j]=k++;

}

i=(i+1)%n;

}

for(i=0;in;i++)

{for(j=0;jn;j++)

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

printf("n");

}

return 0;

}

C语言编程,输出魔方阵

程序代码:

#includelt;stdio.hgt;

#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)(nlt;N)(n%2!=0))

p=0;

}

i=n+1;

j=n/2+1;

a[1][j]=1;

for(k=2;klt;=n*n;k++)

{

i=i-1;

j=j+1;

if((ilt;1)(jgt;n))

{

i=i+2;

j=j-1;

}

else

{

if(ilt;1)i=n;

if(jgt;n)j=1;

}

if(alt;igt;[j]==0)alt;igt;[j]=k;

else

{

i=i+2;

j=j-1;

alt;igt;[j]=k;

}

}

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

{

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

printf("%4d",alt;igt;[j]);

printf("n");

}

return 0;

}

扩展资料:

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

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

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

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

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

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

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

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

首先魔方阵是一个奇数行列式方阵,它的一行,一列,对角线的和都相等。

建立魔方阵的第一步是确定1的位置,它是第一行的中间列,之后要确定其他位置的值,

问题1:if((i1)(jn))时,说明你确定的位置已经超出了魔方阵,所以要用i=i+2;j=j-1;把它拉回的魔方阵内,

问题2:判断第i行地j列的值是否等于0(即是否被填充),如果没填充,就填k,如果填充,再寻找下一个位置,

问题3:因为你的主函数main()前面的返回值为int,所以要提供返回值,那不是return=0,而是return

0;就是返回0,也可以返回1,这没关系的,如果不想要也行,那得把main()前面的int

改为void

.

C语言实现魔方游戏,六面能转的

将每一组数都放在空间数组(也许,很快就研究出来啦,呵呵)里,实现数组中数据的转换。

main()

{int a[3][3][3]; /*将数据放在六块区域中(这里每行3数哈)*/

while(1) /*实现无限循环*/

{a[2][2]=a[2][][2]; /*中间数据变换*/

a[2][2]=a[][2][2]; /*中间数据变换*/

a[3][3][3]=a[][][]; /*空间每一点均可变换*/

}

}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。