魔方阵实现方法全Word文档下载推荐.docx

上传人:b****5 文档编号:16645976 上传时间:2022-11-25 格式:DOCX 页数:26 大小:21.05KB
下载 相关 举报
魔方阵实现方法全Word文档下载推荐.docx_第1页
第1页 / 共26页
魔方阵实现方法全Word文档下载推荐.docx_第2页
第2页 / 共26页
魔方阵实现方法全Word文档下载推荐.docx_第3页
第3页 / 共26页
魔方阵实现方法全Word文档下载推荐.docx_第4页
第4页 / 共26页
魔方阵实现方法全Word文档下载推荐.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

魔方阵实现方法全Word文档下载推荐.docx

《魔方阵实现方法全Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《魔方阵实现方法全Word文档下载推荐.docx(26页珍藏版)》请在冰豆网上搜索。

魔方阵实现方法全Word文档下载推荐.docx

{

inta[N][N],i,j,k;

for(i=0;

i<

N;

i++)/*先处理第一行*/

for(j=0;

j<

j++)

{

a[i][j]=0;

/*先令所有元素都为0*/

}

j=(N-1)/2;

/*判断j的位置*/

a[0][j]=1;

/*将1放在第一行中间一列*/

for(k=2;

k<

=N*N;

k++)/*再从2开始处理*/

i=i-1;

/*存放的行比前一个数的行数减1*/

j=j+1;

/*存放的列比前一个数的列数加1*/

if((i<

0)&

&

(j==N))/*前一个数是第一行第N列时,把下一个数放在上一个数的下面*/

i=i+2;

j=j-1;

else

if(i<

0)/*当行数减到第一行,返回到最后一行*/

i=N-1;

if(j>

N-1)/*当列数加到最后一行,返回到第一行*/

j=0;

if(a[i][j]==0)/*如果该元素为0,继续执行程序*/

a[i][j]=k;

else/*如果该元素不为0,就说明要填的数的位置已经被占,则该数放在上一个数的下面*/

i++)/*输出数组*/

printf("

%5d"

a[i][j]);

\n\n"

);

}

方法二:

/*这个是网友qfyzy提供的,可以算到99阶*/

inta[N][N]={0},i=0,j,k;

i=0;

for(k=1;

)/*开始处理*/

elseif(i<

elseif(j>

elseif(!

a[i][j]){/*如果该元素为0,继续执行程序*/

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

方法三:

/*此程序是在网上找到的c程序设计习题7.7的答案,只能算奇数阵,可以算到15阶*/

{inta[16][16],i,j,k,p,m,n;

p=1;

while(p==1)

{printf("

请输入阶数:

"

/*原答案没有这个输出语句*/

scanf("

%d"

&

n);

if((n!

=0)&

(n<

=15)&

(n%2!

=0))p=0;

for(i=1;

=n;

i++)

for(j=1;

j=n/2+1;

a[1][j]=1;

for(k=2;

=n*n;

k++)

{i=i-1;

1)&

(j>

n))

{i=i+2;

{if(i<

1)i=n;

n)j=1;

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

{for(j=1;

%3d"

\n"

}

/*下面的都是在网上搜索到的,大多数是在编程论坛找到的*/

方法四:

/*这个是我找到的功能最强大的求魔方阵的程序,奇、偶阵都可以求,可以多次测试,最大阶可以自己设定(我测试的最大设定值是507,此时可以运行到506阶,不过也可以设定到508,但是这时真正运行的时候却达不到506阶)*/

#include<

stdlib.h>

math.h>

conio.h>

#defineMAX_INDEX100/*这里可以修改最大阶*/

voidswap(int*a,int*b)

intt;

t=*a;

*a=*b;

*b=t;

}

/*快速排序算法*/

voidQuickSort(inta[],intl,intr)

inti=l;

/*从左至右的游标*/

intj=r+1;

/*从右到左的游标*/

intpivot=a[l];

if(l>

=r)return;

/*把左侧>

=pivot的元素与右侧<

=pivot的元素进行交换*/

while

(1)

do

{/*在左侧寻找>

=pivot的元素*/

i=i+1;

}while(a[i]<

pivot);

{/*在右侧寻找<

j=j-1;

}while(a[j]>

if(i>

=j)break;

/*未发现交换对象*/

swap(&

a[i],&

a[j]);

/*设置pivot*/

a[l]=a[j];

a[j]=pivot;

QuickSort(a,l,j-1);

/*对左段排序*/

QuickSort(a,j+1,r);

/*对右段排序*/

voidHuanf(intArray[][MAX_INDEX],intn)

inti,j;

inta,b,m;

inttempArray1[MAX_INDEX];

inttempArray2[MAX_INDEX];

a=n/2;

b=a+1;

m=n%4;

switch(m)

case0:

case2:

/*穿心对调*/

for(i=0;

n;

for(j=0;

n/2;

if(i<

n/2)

if(i%2==1&

Array[i][j]%2==0)/*偶行换偶*/

Array[i][j],&

Array[n-1-i][n-1-j]);

elseif(i%2==0&

Array[i][j]%2==1)/*奇行换奇*/

else

Array[i][j]%2==1)/*偶行换奇*/

Array[i][j]%2==0)/*奇行换偶*/

/*End穿心对调*/

if(m==2)

if((i!

(i!

=a-1)&

=b-1)&

=n-1))

Array[i][a-1],&

Array[n-1-i][a-1]);

Array[b-1][i],&

Array[b-1][n-1-i]);

Array[0][a-1],&

Array[0][b-1]);

Array[a-1][0],&

Array[b-1][0]);

Array[2][0],&

Array[2][n-1]);

Array[0][2],&

Array[n-1][2]);

break;

case1:

case3:

Array[i][j]%2==0)/*偶行换偶*/

Array[i][j]%2==0)/*奇行换奇*/

elseif(i>

/*重排米字*/

tempArray1[i]=Array[i][i];

tempArray2[i]=Array[a][i];

QuickSort(tempArray1,0,n-1);

QuickSort(tempArray2,0,n-1);

Array[i][i]=tempArray2[i];

Array[a][i]=tempArray1[i];

tempArray1[i]=Array[i][n-1-i];

tempArray2[i]=Array[i][a];

Array[i][n-1-i]=tempArray2[i];

Array[i][a]=tempArray1[i];

/*End重排米字*/

if(m==3)

=a+1))

Array[a-1][i],&

Array[a-1][n-1-i]);

Array[a-1][a-1],&

Array[a+1][a+1]);

Array[a-1][b-1],&

Array[a+1][b-1]);

default:

return;

intNe[MAX_INDEX][MAX_INDEX];

inti,j,n;

while

(1)

printf("

PleaseInputN(0quit):

\n"

scanf("

if(n==0)

/*数组赋初值*/

Ne[i][j]=i*n+(j+1);

Huanf(Ne,n);

%-4d"

Ne[i][j]);

if(j==n-1)

getch();

方法五:

/*相比方法四的程序,这个程序更加简洁,唯一的缺陷是只能求奇数魔方阵,也可以多次测试,最大阶可以自己设定(我测试的最大设定值是507,此时也可以运行到507阶)*/

#defineMAXSIZE21/*这里可以修改最大阶*/

voidmain(void)

intmatrix[MAXSIZE][MAXSIZE];

/*themagicsquare*/

intcount;

/*1..n*ncounting*/

introw;

/*rowindex*/

intcolumn;

/*columnindex*/

intorder;

/*inputorder*/

charline[100];

do{

system("

cls"

\n\t\t\t奇数阶魔方阵(输入1退出程序)"

\n\t\t\t======================================"

\n\n请输入一个小于等于%d的奇数:

MAXSIZE);

gets(line);

order=atoi(line);

if(order==1)

exit(0);

if(order>

MAXSIZE)

\n\t\t***Error***输入的奇数<

%d\n"

MAXSIZE);

elseif(order%2==0)

\n\t\t***Error***输入的必须是奇数!

!

else

row=0;

/*startoffromthemiddle*/

column=order/2;

/*ofthefirstrow.*/

for(count=1;

count<

=order*order;

count++)

matrix[row][column]=count;

/*putnext#*/

if(count%order==0)/*movedown?

*/

row++;

/*YES,movedownonerow*/

{/*computenextindices*/

row=(row==0)?

order-1:

row-1;

column=(column==order-1)?

0:

column+1;

\n\n%d阶魔方阵如下:

order);

for(row=0;

row<

order;

row++)

for(column=0;

column<

column++)

%4d"

matrix[row][column]);

pause"

}while(order!

=1);

方法六:

/*这个程序的功能也很强大,奇、偶阵都可以求,最大阶可以自己设定(我测试的最大设定值是508,此时可以运行到508阶)*/

#defineMAX_NUM15/*这里可以修改最大阶*/

intmain()

introws=0,center=0,iArray[MAX_NUM][MAX_NUM];

intRowSet=0,LineSet=0,newRowSet=0,newLineSet=0;

inti=0,j=0;

intokNum=0;

//settheitemsofarray"

iArray"

tobe0

for(i=0;

i<

MAX_NUM;

i++)

for(j=0;

j<

j++)

iArray[i][j]=0;

//gettherowsnumber

while

(1)

输入行数:

&

rows);

if(rows<

=MAX_NUM)

rows-=1;

break;

else{

行数必须在0和%d之间,请重新"

MAX_NUM);

//setnumber'

1'

center=rows/2;

iArray[0][center]=1;

//initializetheokNum,RowSetandLineSet

okNum=1;

RowSet=0;

LineSet=center;

//seteachitemin"

while(okNum<

(rows+1)*(rows+1))

if(RowSet==0&

LineSet==rows)

RowSet+=1;

newRowSet=(RowSet==0)?

rows:

RowSet-1;

newLineSet=(LineSet==rows)?

LineSet+1;

if(iArray[newRowSet][newLineSet]!

=0)

//thereisalreadyanumberhere!

RowSet=(RowSet==rows)?

RowSet+1;

//RowSet+=1;

else{

RowSet=newRowSet;

LineSet=newLineSet;

iArray[RowSet][LineSet]=++okNum;

//printthe"

=rows;

iArray[i][j]);

system("

return0;

方法七:

/*此程序可以运行到508阶魔方阵*/

#defineN(int)5/*这里可以修改最大阶*/

inti,k,c;

intm[N][N]={0};

i=0;

k=N/2;

for(c=1;

c<

c++)

if(m[i][k]!

=0)

i++;

if(i>

N-1)i=0;

k--;

if(k<

0)k=N-1;

m[i][k]=c;

i--;

k++;

0)i=N-1;

if(k>

N-1)k=0;

%d阶魔方阵:

N);

for(k=0;

m[i][k]);

方法八:

/*此程序可以运行3阶到15阶奇数阵*/

#defineN15

intmain(void)

int

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1