cho cái vd đi bạn
cái gì cũng phải cho cái vd mới hình dung dc chứ
Hình vuông kỳ diệu là ma trận vuông n*n,trong đó các số tự nhiên từ 1,2...n*n xuất hiện đúng 1 lần và tổng trên các cột,hàng và đường chéo đều bằng nhau.Ví dụ,hình vuông 5x5 này có tổng là 65.Mọi người có ý tưởng nào tạo hình vuôn này thì góp ý cho mình với.
Cánh Chym ứ mỏi
cho cái vd đi bạn
cái gì cũng phải cho cái vd mới hình dung dc chứ
- Có nghĩa là một ma trận vuông mới có tính chất P jì đó...ng ta gọi đó là một ma phương.Ở đây là tổng hàng = tổng cột = tổng chéo chính = tổng chéo phụ.
- Trên diễn đàn này có một topic về cái này:hình như tên là" Các thuật giải ngẫu hứng hay sao đó?"Nhưng chỉ nói về phương pháp thôi.
- Mình có code thử dựa theo ý tưởng đó và bạn tham khảo nhé....
C Code:
#include <stdio.h> void taomaphuong(int a[][10],int n) { //Dien so 1 a[n/2][n/2+1] = 1; int k = 1; int i = n/2 ; int j = n/2 + 1; while (k<n*n) { int ok = 0; k = k + 1; //Truong hop o bien tren if (i==0&&k%n!=1&&ok==0) { i = n - 1; a[i][j+1] = k; j = j + 1; ok = 1; } if (j==n-1&&k%n!=1&&ok==0) { j = 0; a[i-1][j] = k; i = i - 1; ok=1; } if (k%n==1&&ok==0) { j =(j + 2)%n; a[i][j] = k; ok=1; } if (ok==0) { i=i-1; j=j+1; a[i][j]=k; } } } void xuat(int a[][10],int n) { for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { } } } void main() { int array[10][10]={(0,0)},n; taomaphuong(array,n); xuat(array,n); }
No way, No success..
Xin lỗi bạn nhé.lúc nãy insert cái ảnh nhầm mất.Ví dụ như cái hình vuông trong hình sau,tổng các hảng,cột,đường chéo đều là 65
Cánh Chym ứ mỏi
- Đúng rùi tớ wên nói với cậu...Với ma trận cấp chẵn thì ko bao jờ có ma phương kiểu đó đc.Trong bài viết trên diễn đàn này mà tớ nói đó.Cũng đề cập đến chuyện đó...Cậu search thử nhé!Nguyên bản được gửi bởi dieucay555
No way, No success..
Híc,tớ cũng đã viết được với n lẻ,còn n chẵn thì sao nhỉ?có ai có ý tưởng gì không?
Cánh Chym ứ mỏi
đó là bài hình vuông có số chẵn lun đó bạnC Code:
#include "stdio.h" #include "conio.h" #define max 100 int n=6,d,c,k=1; int i,j; int a[max][max]; void chuanbi_le() { d=(n+1)/2+1; c=(n+1)/2; k=1; for (i=1;i<=n;i++) for (j=1;j<=n;j++) a[i][j]=0; a[d][c]=k; } void n_le() // ma tran ky ao voi n le { chuanbi_le(); while (k<n*n) { d++; if (d>n) d=1; c++; if (c>n) c=1; if (a[d][c]!=0) do { d++; if (d>n) d=1; c--; if (c<1) c=n; } while (a[d][c]!=0); k++; a[d][c]=k; } } void inMT() // In ma tran { clrscr(); for (i=1;i<=n;i++) { for (j=1;j<=n;j++) } } void doicho(int &a, int &b) { int t; t=a;a=b;b=t; } void chuanbi_chan() { k=1; for (i=1;i<=n;i++) for (j=1;j<=n;j++) { a[i][j]=k; k++;} } int laycot (int c) { return ((c>n/2)?c-n/2:c); } void n_chan() { chuanbi_chan(); for (i=1; i<=n/2; i++) { for (j=i; j<=i+n/4-1; j++) { d=i;c=j; c=laycot(c); doicho(a[i][c],a[n-i+1][n-c+1]); doicho(a[n-i+1][c],a[i][n-c+1]); } if ((n/2)%2!=0) { c=laycot(c+1); doicho(a[i][c],a[i][n-c+1]); c=laycot(c+1); doicho(a[i][c],a[n-i+1][c]); } } } void main() { clrscr(); if (n%2==0) n_chan(); else n_le(); inMT(); getch(); }