當前位置:首頁 » 編程軟體 » 魔方編程

魔方編程

發布時間: 2023-02-08 14:59:06

⑴ 求魔方的演算法 我指的是計算機編程演算法 最好有C++ 或C#的源代碼

具體做法:
方法一;
/*此程序使我按照上面介紹的魔方陣的規律編寫的,不過只能求奇數魔方陣,經過測試可以算到508階*/
#define N 7
#include<stdio.h>
void main()
{
int a[N][N],i,j,k;
for(i=0;i<N;i++) /*先處理第一行*/
for(j=0;j<N;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=i+2;
j=j-1;
a[i][j]=k;
}
}
for(i=0;i<N;i++) /*輸出數組*/
{
for(j=0;j<N;j++)
printf("%5d",a[i][j]);
printf("\n\n");
}
}

方法二:
/*這個是網友qfyzy為幫助我找錯而提供的,可以算到99階*/
#define N 7
#include<stdio.h>
void main()
{
int a[N][N]={0},i=0,j,k; /*先令所有元素都為0*/
j=(N-1)/2;
i=0;
for(k=1;k<=N*N;) /*開始處理*/
{
if((i<0)&&(j==N)) /*前一個數是第一行第N列時,把下一個數放在上一個數的下面*/
{
i=i+2;
j=j-1;
}
else if(i<0) /*當行數減到第一行,返回到最後一行*/
i=N-1;
else if(j>N-1) /*當列數加到最後一行,返回到第一行*/
j=0;
else if(!a[i][j]){ /*如果該元素為0,繼續執行程序*/
a[i][j]=k++;
i=i-1;
j=j+1;
}
else /*如果該元素不為0,就說明要填的數的位置已經被占,則該數放在上一個數的下面*/
{
i=i+2;
j=j-1;
}
}
for(i=0;i<N;i++) /*輸出數組*/
{
for(j=0;j<N;j++)
printf("%5d",a[i][j]);
printf("\n\n");
}
}

c語言中魔方陣編程的思路

/*
所謂魔方陣是指這樣的的方陣:
它的每一行、每一列和對角線之和均相等。
輸入n,要求列印由自然數1到n2的自然數構成的魔方陣(n為奇數)。
例如,當n=3時,魔方陣為:
8 1 6
3 5 7
4 9 2
魔方陣中各數排列規律為:
① 將「1」放在第一行的中間一列;
② 從「2」開始直到n×n為止的各數依次按下列規則存放:每一個數存放的行比前一個數的行數減1,列數同樣加1;
③ 如果上一數的行數為1,則下一個數的行數為n(最下一行),如在3×3 方陣中,1在第1行,則2應放在第3行第3列。
④ 當上一個數的列數為n時,下一個數的列數應為1,行數減1。如2在第3行第3列,3應在第2行第1列。

⑤如果按上面規則確定的位置上已有數,或上一個數是第1行第n列時,則把下一個數放在上一個數的下面。

如按上面的規定,4應放在第1行第2列,但該位置已被1占據,所以4就放在3的下面。由於6是第1行第3列(即最後一列),故7放在6下面。
*/

#include"stdio.h"

void main()
{
int i,n=5;
printf("---------------列印魔方陣-------------\n\n");
int a[5][5];
for( i=0;i<n;i++)
for(int j=0;j<n;j++)
a[i][j]=0;//初始化

i=0;
int j=n/2;
int t=1;
int si=0;
int sj=0;//記錄上一個數的位置

while(t<=n*n)
{
//printf("\n%4d\n\n",t);
if(a[i][j]==0)
a[i][j]=t;

else
{
if(si==0 && sj==n-1)
{
a[si+1][sj]=t;
i=si+1;
j=sj;
}
if(si!=n-1)
{
a[si+1][sj]=t;
i=si+1;
j=sj;
}

if(si==n-1)
{
a[0][sj]=t;
i=0;
j=sj;
}
}

si=i;
sj=j;

/*計算下一個元素的位置*/
if(i==0)
i=n-1;
else
i=i-1;

if(j==n-1)
j=0;
else
j=j+1;

t=t+1;
}

for(i=0;i<n;i++)
{
for(int j=0;j<n;j++)
printf("%4d",a[i][j]);
printf("\n\n");
}

}

熱點內容
雲伺服器做網站伺服器用什麼系統 發布:2024-05-02 10:20:26 瀏覽:896
python經典程序實例 發布:2024-05-02 09:42:07 瀏覽:260
酷豐c10出廠密碼多少 發布:2024-05-02 09:23:33 瀏覽:376
開發安卓游戲需要會什麼 發布:2024-05-02 09:04:22 瀏覽:977
無線網密碼忘了手機怎麼改 發布:2024-05-02 08:57:24 瀏覽:527
iis上傳文件許可權設置 發布:2024-05-02 08:56:39 瀏覽:232
ipad文件加密 發布:2024-05-02 08:20:30 瀏覽:443
粉土壓縮模量 發布:2024-05-02 07:53:59 瀏覽:806
國都證券初始密碼是多少 發布:2024-05-02 07:46:39 瀏覽:110
shell腳本和linux命令行 發布:2024-05-02 07:37:54 瀏覽:968