你好,剛那個魔方陣,如果以a 0為判斷依據,能不能改出來

時間 2022-04-06 14:10:10

1樓:聽不清啊

這個是另改的:

#include

int main()

int a[16][16]=,i,j,i1,j1,k,n;

printf("enter is 1~15:");

scanf("%d",&n);

i=0,j=(n-1)/2;

a[i][j]=1;

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

else i++;

a[i][j]=k;

for(i=0;iprintf("\n");

for(j=0;jprintf("%5d",a[i][j]);

printf("\n");

return 0;

再一種方案:

#include

int main()

int a[16][16]=,i,j,k,n;

printf("enter is 1~15:");

scanf("%d",&n);

i=0,j=(n-1)/2;

a[i][j]=1;

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

else

if(i<0)i=i+n;

if(j>=n)j=j-n;

if(a[i][j]>0)

a[i][j]=k;

for(i=0;iprintf("\n");

for(j=0;jprintf("%5d",a[i][j]);

return 0;

2樓:匿名使用者

#include

int main()

,i,j,k,n;

printf("enter is 1~15:");//n要為奇數scanf("%d",&n);

i=0,j=(n-1)/2;

a[i][j]=1;

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

if(j>=n)

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

//中間程式有點問題

else

}for(i=0;i

c語言輸出魔方陣程式解釋

3樓:匿名使用者

首先魔方陣是乙個奇數行列式方陣,它的一行,一列,對角線的和都相等。

建立魔方陣的第一步是確定1的位置,它是第一行的中間列,之後要確定其他位置的值,

問題1:if((i<1)&&(j>n))時,說明你確定的位置已經超出了魔方陣,所以要用i=i+2;j=j-1;把它拉回的魔方陣內,

問題2:判斷第i行地j列的值是否等於0(即是否被填充),如果沒填充,就填k,如果填充,再尋找下乙個位置,

問題3:因為你的主函式main()前面的返回值為int,所以要提供返回值,那不是return=0,而是return 0;就是返回0,也可以返回1,這沒關係的,如果不想要也行,那得把main()前面的int 改為void .

c語言做的魔方陣

4樓:

我奇怪你的語法怎麼可能沒錯,int str[n][n];肯定是編譯不通的,陣列定義時長度必須是常量。給你乙個我自己寫的魔方陣演算法吧,算作參考

#include

#define n 100

void sort(int *p,int num)sort(p,n);

for(i=0;i

5樓:聽不清啊

下面是乙個列印奇數階魔方陣的程式:

#include

int main()

;while(!(n%2))

c語言輸出魔方陣,所謂魔方陣是指這樣的方陣,她的每一行,每一列和對角線之和相

6樓:戲雨南

#include

#define max 15

int a[max][max];

int n;

void magic();

int main()

while(1);

magic();

printf("the is %d*%d magic",n,n);

printf("..............\n");

for(i=0;i

}void magic()

a[i][j]=k;

k++;}}

演算法:只能輸入奇數!! 3*3正確的應該如下,有規律的:

# # # #   ## 6 1 8   ## 7 5 3   ## 2 9 4   ## # # # #

1.首先把第乙個數1,放在第一排正中;//估計也是要奇數的原因2.怎樣來確定下乙個元素2呢?

先找到1的左上方,如果超出了這個矩陣,就把他放在對應的行或列下面,沒有超出就放在左上方就ok了,比如,4,5,6;

3,如果在該元素的左上方已經有元素了,就把下個元素放在自己的下面就ok了;比如3的左上方有1了,就把4放在3下面。

4,重複 上面的2,3,;就行了。

我以前寫的,希望可以幫你!

如何求解偶數階魔方陣 用c語言 編寫的**

7樓:匿名使用者

本人親自寫的程式,望採納,如下:

#include

int a[200][200]=;           /*200為我自己定義的,可根據需要修改*/

void jsz(int n)                                /*奇數魔方陣演算法*/

else

a[p][k]=i;}}

void ou4bz(int n)                  /*偶數4的倍數魔方陣演算法*/

if(n%2==0)

else jsz(n);

for(i=0;i

c語言 三階魔方陣

8樓:匿名使用者

我只想說你的演算法錯了,你還是去查一查魔方陣的演算法吧;下面是n階奇數魔方陣的程式,你好好看看吧:

# include

void main()

int array[16][16];

int i, j, k, m, n;

/* 變數初始化 */

m = 1;

while(m == 1)

printf("請輸入n(0scanf("%d", &n);

/* 判斷n是否是大於0小於等於15的奇數 */if((n!=0) && (n<=15) && (n%2!=0))printf("矩陣階數是 %d\n", n);

m = 0;

/* 陣列賦初值為0 */

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

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

array[i][j] = 0;/* 建立魔方陣 */j = n/2 + 1;

array[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(array[i][j] == 0)

array[i][j] = k;

else

i = i + 2;

j = j - 1;

array[i][j] = k;

}/* 輸出魔方陣 */

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

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

printf("%5d", array[i][j]);

printf("\n");

}輸入3所得到的三階魔方陣為:

9樓:丶殺手丶

三階魔方陣。用三維陣列才行。你這一維怎麼輸出啊?

c語言程式設計,輸出魔方陣

10樓:小夏在深圳

源**如下:

#include

#define n 5

int main()

int a[n][n]=, i, j, k, t, x, y;

i=0; /*自然數1的行標*/

j=n/2; /*自然數1的列標*/

t=n-1; /*最後一行、最後一列的下標*/for(k=1; k<=n*n; k++)a[i][j]=k;

x=i;

y=j;

if(i == 0)

i=t;

else

i=i-1;

if(j != t)

j=j+1;

else

j=0;

if(a[i][j]!=0)

i=x+1;

j=y;

printf("生成的5-魔方陣為:");

for(i=0; iprintf("\n");

for(j=0; jprintf("%3d", a[i][j]);

printf("\n");

return 0;

擴充套件資料1、由於乙個整型數要占用兩個記憶體,因此,如果魔方陣中要存放的數有max個,則分配記憶體時要分配2*max個單元,從而有malloc(max+max)。在malloc()函式中使用max+max而不是2*max是考慮了程式執行的效能。

2、記憶體是一維線性的,因此在訪問陣列元素時,要將雙下標轉換為單個索引編號。在程式中直接定義了指標變數來指向陣列空間,即使用malloc()函式分配的記憶體。

11樓:凌許撒問芙

你好,首先你要搞清楚魔方陣的排列規律,我看了下你的程式,只是針對奇數來排列的,而魔方陣的奇數排列規律就是:

(1)將1放在第一行中間一列;

(2)從2開始直到n×n止各數依次按下列規則存放:

按45°方向向右上走,每乙個數存放的行比前乙個數的行數減1,列數加1;

(3)如果行列範圍超出矩陣範圍,則迴繞。

例如1在第1行,則2應放在最下一行,列數同樣加1;

又如某個數在第n列,則下乙個數應放在第一列,行數同樣減1;

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

知道了排列規律,就好辦了,程式注釋如下:

#include

void

main()

else

//如果不是,又有以下情況

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

//如果按上面規則確定的位置上沒有數,那麼就放在該位置

a[i][j]=k;

else

//如果按上面規則確定的位置上已有數,那麼也是將下乙個數放到上乙個數的下面

}for(i=1;i<=n;i++)

printf("\n\n");}

12樓:匿名使用者

#include

int main()

,i,j,n;

i=1;

printf("請輸入乙個數");

scanf("%d",&n);//輸入魔方陣的維度n

j=n/2+1;     // j是維度的一半加1.

a[i][j]=1;   //確定第一排的中間乙個數為1

for(int k=2;k<=n*n;k++)//已經確定1的位置了,再迴圈確定2~n*n的位置

if(j>n)  //如果只有橫排超過最右,橫排挪到左邊第二行。

if(a[i][j]==0) a[i][j]=k;  //如果這個位置還沒有賦值,那麼賦值為k。

else        //已經賦值過了。那麼豎排往下挪兩位,橫排往左移一位,再賦值為k。

}  for(i=1;i<=n;i++) //迴圈輸出位置。

}魔方陣有一定畫法,先取一點,然後往左上、右下、右上、左下,任意選乙個方向填數字就可以了。

這個是其中乙個畫法:

1)將1填入第一行中間;

2)將每個數填在前乙個數的右上方。

3)若該位置超出最上行,則改填在最下行的對應位置;

4)若該位置超出最右列,則該填在最左列的對應行位置;

5)若某元素填在第一行最右列,下乙個數填在該數同列的下一行;

6)若某數已填好,但其右上角已填了其他資料,則下乙個數填在該數同列的下一行位置。

touch3 32G跟酷比魔方U9GT那個實用?

其實看樓主一般拿來幹嘛的啦 我有一台touch 也用過安卓系統 其實不需要一定買touch3 那個已經停產了 而且3代與4代 效能和有很大差距 不論是螢幕還是什麼 建議買4代 絕對不後悔 不論是遊戲還是 資金不夠建議去 趕集網買2手的touch4代 1200元運氣好的話可以買到 32g的哦 3代建議...

你好還是那個填充牆問題,我這找不到那個圖示,也沒有標註,只說要我去建築圖找,是不是牆體都是啊

你好 還是那個填充牆問題,我這找不到那個圖示,也沒有標註,只說要我去建築圖找,是不是牆體都是啊?答 答您這題時,我也經常碰到過在建築施工圖上,而不在建築結構基礎圖上。記得您前一問是全框。哪麼所有的牆體 裡 外牆都屬於框架填充牆 是牆體都是,都按建築圖上的要求去做。理解準確。實際他指的元寶形基礎上大下...

你好,我那個朋友具體是這樣的,你好我是剛剛那個男朋友談了兩年的,追問好像發不出去,所以只好這樣啦 5

姜小憂 首先他這種行為違反了公司的企業規定,如果公司發現了要起訴他的話他要賠償這9000元,並賠償公司的名譽損失,失業是必然的,其次如果公司不追究,反倒是業主追究起來,也有兩種情況1,私了,賠償一堆金額 2,報案,按照國家商業企業工作人員違規條款施行罰款,因為數額較小,一般情況下是不會被判的,最多拘...