幻方與編程
#include <stdio.h>
#define N 3
int fun(int (*a)[N])
{ int i,j,m1,m2,row,colum;
m1=m2=0;
%判斷對角線的和不否相等 不相等返回0
for(i=0; i<N; i++)
{ j=N-i-1; m1+=a[i][i]; m2+=a[i][j]; }
if(m1!=m2) return 0;
for(i=0; i<N; i++) {
/**********found**********/
row=colum=0;
%判斷行row 列colum的和 是否相等 不相等返回0
for(j=0; j<N; j++)
{ row+=a[i][j]; colum+=a[j][i]; }
/**********found**********/
if( (row!=colum) || (row!=m1) ) return 0;
}
/**********found**********/
%判斷完畢是幻方返回1
return 1;
}
main()
{ int x[N][N],i,j;
%輸入矩陣x
printf("Enter number for array:\n");
for(i=0; i<N; i++)
for(j=0; j<N; j++) scanf("%d",&x[i][j]);
printf("Array:\n");
%輸出矩陣
for(i=0; i<N; i++)
{ for(j=0; j<N; j++) printf("%3d",x[i][j]);
printf("\n");
}
%根據fun的值輸出結果
if(fun(x)) printf("The Array is a magic square.\n");
else printf("The Array isn't a magic square.\n");
}
你要是符合C規則的矩陣輸入方法否可以啊??? 你看輸出矩陣那塊 輸出的矩陣跟你輸入的是不是一樣啊 要是一樣 結果都是對的 一般的就是 列之間用空格 行之間用回車 這段程序的重點是為什麼把 判斷對角線寫在前面吧????要是順序反了 判斷是不全面的
B. 幻方的程序編寫
利用計算機編程序,可求解出任意階幻方.(但數字位數受電腦限制,實際上只能是有限范圍內的任意階),如利用Matlab進行計算n階幻方,其命令為:A=magic(n)。
對於某些平方幻方,高次幻方,利用計算機輔助計算,也可快速求得。
一次幻方,一次幻立方,一次多維幻方,甚至可用簡單公式全部求得。
某些類型的平方幻方,甚至高次高維幻方,也可用公式求得。
在幻方公式求解方法,中國處於世界領先水平.中國李文的高維高次幻方公式,是幻方理論中的精品.吳碩辛的高次幻方理論,也可用公式求解。
C. 幻方 問題 n 幻方編程問題
n(n為奇數)階幻方實現方法:
⑴ 將1放在第一行中間一列;
⑵ 從2開始直到n×n止各數依次按下列規則存放按45°方向行走,如向右上每一個數存放的行比前一個數的行數減1,列數加1
⑶ 如果行列范圍超出矩陣范圍,則回繞,例如1在第1行,則2應放在最下一行,列數同樣加1; ⑷ 如果按上面規則確定的位置上已有數,或上一個數是第1行第n列時則把下一個數放在上一個數的下面。
代碼如下:
#include"stdio.h"
#include"math.h"
int a[10][10]; //定義一個二維數組存放數據,大小根據測試的階數確定
void ins(int n)
{
int x,y,m;
x=0;
y=n/2;
for(m=1;m<=n*n;m++) //依次將1~n*n賦值給二維數組
{
a[x][y]=m;// 將1放在第一行中間一列
if(m%n!=0)
{
x--; // 從2開始直到n×n止各數依次按下列規則存放:按45度方向行走
y++;
if(x<0) // 如果行列范圍超出矩陣范圍,則回繞
x=x+n;
if(y==n)
y=n-y;
}
else
{
x++;
if(x==n)
x=x-n;
}
}
}
main()
{
int i,j,n;
scanf("%d",&n);//輸入階數
ins(n); //調用函數
for(i=0;i<n;i++) //列印出幻方
{
for(j=0;j<n;j++)
printf("%4d",a[i][j]); //格式化輸出
puts(""); //列印2個空行
puts("");
}
getch(); //win_TC下的語句用於停住畫面,其他開發環境下無需
}
D. 如何用c語言編程使三階幻方不等(使用數字1至9,直接輸出所有結果
4用1至9這9個數編制一個三階幻方,寫出所有可能的結果。所謂幻方是指在正方形的方格表的每個方格內填入不同的數,使得每行、每列和兩條對角線上的各數之和...3119
E. 怎樣用C語言編寫幻方
你的這個問題實際上包括兩個問題:
1、幻方的演算法
2、怎樣用C語言實現幻方的演算法
這兩個問題是大不同的。
關於幻方的演算法,或者叫幻方填法,目前有很多種,拉丁正交、馬步法等等,針對奇數或者偶數(又分單偶數和雙偶數)等有不同的演算法,但這些演算法只是幫你找到幻方的一個或多個實例(不會是全部),而同階數的幻方到底有多少個,那隻有用窮舉法了,比如4階幻方,基本4階幻方共7040個,剔除旋轉翻轉的,即具有獨立結構的共880個;4階完美幻方共84個,具有獨立結構的共48個。
對於高階幻方(比如超過8階),窮舉法實際上是不可行的,因為它的窮舉時間將是天文數字(以目前主流PC),所以不要試圖用計算機窮舉高階幻方的全部結果,那將是徒勞的。
如果你只是需要1個實例,那麼推薦你使用MATLAB語言工具,因為它提供了幻方函數magic(n),不需要編程,直接從命令窗口輸入就可以得到答案。
至於第二個問題,當然你首先會C語言,剩下的就是編程技巧問題了,而這個問題是無從回答的。相信你問的是第一個問題。
以上的回答雖然沒有明確給出答案,但相信對你會有幫助。