日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

魔方阵(奇数,单偶,双偶)

發(fā)布時(shí)間:2024/9/27 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 魔方阵(奇数,单偶,双偶) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

一、奇數(shù)

二、雙偶

三、雙偶


魔方陣,是指組成元素為自然數(shù)1、2、…、n2的平方的n×n的方陣,其中每個(gè)元素值都不相等,且每行、每列以及主、副對(duì)角線上各n個(gè)元素之和都相等。

魔方陣的規(guī)律

一、奇數(shù)

階數(shù)為奇數(shù)n(n = 1,3,5...)

(1)將1放在第一行中間一列。
(2)從2開始到n*n,每一個(gè)數(shù)存放的行在之前一個(gè)數(shù)的行數(shù)減1,列數(shù)加1。如果當(dāng)前數(shù)字在第一行,那么下一個(gè)數(shù)字的行數(shù)就在最后一行,同理,如果數(shù)字在最后一列,那么下一個(gè)數(shù)字的列數(shù)就在第一列。
(3)當(dāng)前數(shù)字的位置已經(jīng)被之前的數(shù)字占據(jù)了位置,則防放在前一個(gè)數(shù)字的下一行,同一列。

代碼如下:

#define ROW 3 void SMagicSquare() {int arr[ROW][ROW] = {0};arr[0][ROW/2] = 1;//將第一個(gè)數(shù)字放在第一行中間一列int currow = 0;//當(dāng)前數(shù)據(jù)存放的行int curcol = ROW/2;//當(dāng)前數(shù)據(jù)存放的列int i = 0;int j =0;for(int i = 2;i <=ROW*ROW;i++){if(arr[(currow+ROW-1)%ROW][(curcol+1)%ROW] != 0){currow =(currow+1+ROW) %ROW;}else{currow = (currow-1+ROW) %ROW;curcol = (curcol+1+ROW)%ROW;}arr[currow][curcol] = i;}//打印此方陣for(int i = 0;i<ROW;i++){for(int j = 0;j<ROW;j++){printf("%-5d",arr[i][j]);}printf("\n");} }

二、雙偶

階數(shù)為4n(n=1,2,3...)

(1) 將整個(gè)方陣劃分成k*k個(gè)4階方陣,然后在每個(gè)4階方陣的對(duì)角線上做記號(hào);

(2) 由左而右、由上而下,遇到?jīng)]有記號(hào)的位置才填數(shù)字,但不管是否填入數(shù)字,每移動(dòng)一格數(shù)字都要加1;

(3) 自右下角開始,由右而左、由下而上,遇到?jīng)]有數(shù)字的位置就填入數(shù)字,但每移動(dòng)一格數(shù)字都要加1。

代碼如下: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

#define N 4 void DDMagicSquare() {int arr[N][N] = {0};int i;int j;int lvalue = 1;int rvalue = N*N;for(i = 0;i<N;i++){for(j = 0;j<N;j++){if(i%4 == j%4 || (i+j)%4 == 3){arr[i][j] = rvalue;}else{arr[i][j] = lvalue; }lvalue++;rvalue--;}}for(i = 0;i<N;i++){for(j =0;j<N;j++){printf("%-3d",arr[i][j]);}printf("\n");} }

三、雙偶

階數(shù)為4n+2(n=1,2,3...)

(1)將整個(gè)方陣劃分成k*k個(gè)4階方陣,這四個(gè)方陣都為奇方陣,利用上面講到的方法依次將A、D、B、C填充為奇魔方。

(2)交換交換A、C魔方元素,對(duì)魔方的中間行,交換從中間列向右的n列各對(duì)應(yīng)元素;對(duì)其他行,交換從左向右n列各對(duì)應(yīng)元素。

(3)交換B、D魔方元素,交換從中間列向左m – 1列各對(duì)應(yīng)元素。

代碼如下:

#define MAX 10void SDMagicSquare() {int i = 0;int j = 0;int arr[MAX][MAX] = {0};arr[0][MAX/4] = 1;int currow = 0;int curcol = MAX/4;//左上方陣/for(i =2;i<=MAX*MAX/4;i++){if(arr[(currow-1+MAX/2)%(MAX/2)][(curcol+1)%(MAX/2)] != 0){currow = (currow+1)%(MAX/2);}else{currow = (currow-1+MAX/2)%(MAX/2);curcol = (curcol+1)%(MAX/2);}arr[currow][curcol] = i;}//右上方陣/arr[MAX/2][MAX*3/4] = MAX*MAX/4+1;currow = MAX/2;curcol = MAX*3/4;for(i = MAX*MAX/4+2;i<=MAX*MAX/2;i++){if(arr[(currow-1+MAX/2)%(MAX/2)+MAX/2][(curcol+1+MAX/2)%(MAX/2)+MAX/2] != 0){currow = (currow+1)%(MAX/2)+MAX/2;}else{currow = (currow-1+MAX/2)%(MAX/2)+MAX/2;curcol = (curcol+1)%(MAX/2)+MAX/2;}arr[currow][curcol] = i;}//左下方陣/arr[0][MAX*3/4] = MAX*MAX/2+1;currow = 0;curcol = MAX*3/4;for(i = MAX*MAX/2+2;i<=MAX*MAX*3/4;i++){if(arr[(currow-1+MAX/2)%(MAX/2)][(curcol+1+MAX/2)%(MAX/2)+MAX/2] != 0){currow = (currow+1)%(MAX/2);}else{currow = (currow-1+MAX/2)%(MAX/2);curcol = (curcol+1)%(MAX/2)+MAX/2;}arr[currow][curcol] = i;}//右下方陣/arr[MAX/2][MAX/4] = MAX*MAX/4*3+1;currow = MAX/2;curcol = MAX/4;for(i = MAX*MAX/4*3+2;i<=MAX*MAX;i++){if(arr[(currow-1+MAX/2)%(MAX/2)+MAX/2][(curcol+1+MAX/2)%(MAX/2)] != 0){currow = (currow+1)%(MAX/2)+MAX/2;}else{currow = (currow-1)%(MAX/2)+MAX/2;curcol = (curcol+1)%(MAX/2);}arr[currow][curcol] = i;}int k = MAX/4;//k用來記錄小方陣的中間位置int tmp = 0;for(i = 0;i<MAX/2;i++){for(j = 0;j<MAX;j++){if(i == k && j>=k && j<=2*k-1)//交換A,C方陣中間一行對(duì)應(yīng)的數(shù)字{tmp = arr[i][j];arr[i][j] = arr[i+MAX/2][j];arr[i+MAX/2][j] = tmp;}if(i != k && j>=0 && j<k)//交換A,C方陣其他行對(duì)應(yīng)的數(shù)字{tmp = arr[i][j];arr[i][j] = arr[i+MAX/2][j];arr[i+MAX/2][j] = tmp;}if(j >=MAX/2+MAX/4-k+2 && j<= MAX/2+MAX/4)//交換B,D方陣中間一列對(duì)應(yīng)的數(shù)字{tmp = arr[i][j];arr[i][j] =arr[i+MAX/2][j];arr[i+MAX/2][j] =tmp;}}}for(i = 0;i<MAX;i++){for(j=0;j<MAX;j++){printf("%-5d",arr[i][j]);}printf("\n");} }

?

?

?

?

?

?

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的魔方阵(奇数,单偶,双偶)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。