係統粉 > 電腦問答 > 其他問答

已解決魔方陣

提問者:蘇乃晴  |  瀏覽次  |  提問時間:2017-03-19  |  回答數量:7

魔方陣 魔方陣一個n*n維數組,存放1,2,3。。。。n*n使得每行,每列,對角線之和都相等如3*3的8 1 63 5 74 9 24*4的13 3 2 16 5 11 8 1012  6 9 7 4 14 15 1有誰能給個算法,我想了好幾天也沒弄出來

已有7條答案
不能吃豆腐_

不能吃豆腐_

回答數:109  |  被采納數:17

http://zhidao.baidu/question/6094228.html
2017-03-19 06:55:48
讚 10
tianyu66170553

tianyu66170553

回答數:185  |  被采納數:84

以前砸門論壇中有過這題阿。。我看看怎麼編了著?
2017-03-19 08:50:26
讚 18
_夜魘丶

_夜魘丶

回答數:170  |  被采納數:46

那個網上的隻有奇數的魔方陣有用,而偶數就沒有算出來
2017-03-19 13:09:00
讚 17
怪盜小子1996

怪盜小子1996

回答數:151  |  被采納數:139

我記得以前曾經有個高手給我指導過這題,用的是一個印度那邊的算法,等我找找~
2017-03-19 16:07:48
讚 15
漠漠無煙

漠漠無煙

回答數:167  |  被采納數:3

也是隻能解出奇數魔方的情況,偶數的似乎是沒法解的,沒有中間數,存在對稱性,超出研究範圍了。#include<stdio.h>#include<conio.h>#include<stdlib.h>main(){ int a,n,num,t,i,j,m,sum; int**arr; FILE *fp; if((fp=fopen("record.txt","w+"))==NULL) { printf("cannot open the file!!!"); exit(0); } again: printf("n=");scanf("%d",&n);if(!(n%2)) {puts("please input an odd!\n"); goto again; } fprintf(fp,"n=%d\n",n); a=n+n/2*2; if((arr=(int**)malloc(a*sizeof(int*)))==NULL) { puts("no memory left!!\n"); exit(1); } for(i=0;i<a;i++) if((arr[i]=(int*)malloc(a*sizeof(int)))==NULL) { puts("no memory left!!\n"); exit(1); } for(i=0;i<a;i++) for(j=0;j<a;j++) arr[i][j]=0; num=1; t=0; for(i=a-n;i<a;i++,t++) { m=t; for(j=i;j>i-n;j--,num++,m++) { arr[j][m]=num; if(j<=n/2) arr[j+n][m]=num; else if(j>=(n+n/2)) arr[j-n][m]=num; else if(m<=n/2) arr[j][m+n]=num; else if(m>=(n+n/2)) arr[j][m-n]=num; } } sum=0; for(i=n/2;i<n/2+n;i++) { for(j=n/2;j<n/2+n;j++) {printf("%5d",arr[i][j]); fprintf(fp,"%5d",arr[i][j]); } puts("\n\n"); fprintf(fp,"\n\n"); }for(i=n/2;i<n/2+n;i++)sum+=arr[n/2][i]; printf("sum=%d\n",sum); fprintf(fp,"sum=%d\n",sum); free(arr); fclose(fp); getch(); }複製代碼

(1)

(2)

(3)

2017-03-19 15:34:29
讚 16
癲狂_y

癲狂_y

回答數:183  |  被采納數:72

謝了!!!!困惑我N天的程序終於弄懂了......
2017-03-19 18:24:18
讚 18
我就一個人好了

我就一個人好了

回答數:51  |  被采納數:137



自己想出來的?
2017-03-19 12:59:39
讚 5
相關問答
最新其他問答
解決方法