當前位置:編程學習大全網 - 編程語言 - 用C語言寫壹個簡單的程序,判斷N×N的矩陣是否為幻方。

用C語言寫壹個簡單的程序,判斷N×N的矩陣是否為幻方。

#包含“stdio.h”

#包含“math.h”

int?a[256][256];

int?總和;

int?check();

作廢?ins(int?n);

作廢?main(){

int?I,j,n,k,t,p,x;

scanf("%d ",& ampn);

sum =(n * n+1)* n/2;

if(n%2==1)?//奇數幻方

ins(n);

if(n%4==2)?{?//單偶幻方

k = n/2;

ins(k);

for(I = 0;?我& ltk;?i++)

for(j = 0;?j & ltk;?j++){

a[I][j+k]= a[I][j]+2 * k * k;

a[I+k][j]= a[I][j]+3 * k * k;

a[I+k][j+k]= a[I][j]+k * k;

}

t =(n-2)/4;

for(I = 0;?我& ltk;?i++)

for(j = 0;?j & ltk;?j++){

如果((j & ltt)& amp;& amp(我& ltt)){

p = a[I][j];

a[I][j]= a[I+k][j];

a[I+k][j]= p;

} if((j & lt;t)& amp;& amp(我& gtk-t-1)){

p = a[I][j];

a[I][j]= a[I+k][j];

a[I+k][j]= p;

}如果((i & gt= t & amp& amp我& lt= k-t-1)& amp;& amp(j & gt= t & amp& ampj & ltt*2)){

p = a[I][j];

a[I][j]= a[I+k][j];

a[I+k][j]= p;

} if(j & gt;1。& ampj & lt=t){

p = a[I][j+k];

a[I][j+k]= a[I+k][j+k];

a[I+k][j+k]= p;

}

}

}

if(n%4==0)?{?//雙偶幻方

x = 1;

for(I = 0;?我& ltn;?i++)

for(j = 0;?j & ltn;?j++)

a[I][j]= x++;

for(I = 0;?我& ltn;?i++)

for(j = 0;?j & ltn;?j++){

if(I % 4 = = 0 & amp;& ampabs(i-j)%4==0)

for(k = 0;?k & lt4;?k++)

a[I+k][j+k]= n * n-a[I+k][j+k]+1;

不然呢?if(I % 4 = = 3 & amp;& amp(i+j)%4==3)

for(k = 0;?k & lt4;?k++)

a[I-k][j+k]= n * n-a[I-k][j+k]+1;

}

}

if(check(n)==1){

for(I = 0;?我& ltn;?i++){

for(j = 0;?j & ltn;?j++)

printf("%5d ",a[I][j]);

printf(" \ n ");

}

}

}

int?check(int?n)?{?//檢查它是否是魔方

int?I,j,sum1=0,sum2

for(I = 0;?我& ltn;?i++){

for(j = 0;?j & ltn;?j++)

sum 1+= a[I][j];

if(sum1!=總和)

回歸?0;

sum 1 = 0;

}

for(I = 0;?我& ltn;?i++){

for(j = 0;?j & ltn;?j++)

sum 1+= a[I][j];

if(sum1!=總和)

回歸?0;

sum 1 = 0;

}

for(sum1=0,sum2=0,i=0,j = 0;?我& ltn;?i++,j++){

sum 1+= a[I][j];

sum 2+= a[I][n-j-1];

}

if(sum1!=總和)

回歸?0;

if(sum2!=總和)

回歸?0;

其他

回歸?1;

}

作廢?ins(int?n)?{?//單個和偶數幻方的輸入

int?x,y,m;

x = 0;

y = n/2;

for(m = 1;?m & lt= n * n?m++){

a[x][y]= m;

if(m%n!=0){

x-;

y++;

if(x & lt;0)x = x+n;

if(y = = n)y = n-y;

}否則{

x++;

if(x = = n)x = x-n;

}

}

}

//?C++語言實現

//(1)求奇數幻方

# include & ltiostream.h & gt

# include & ltiomanip.h & gt

int?main(){

int?n,x,y,tot=0,I,j,a[100][100]= { 0 };

cout & lt& lt"請輸入壹個奇數"

CIN & gt;& gtn;

a[I = n/2][j = 0]= ++ tot;

I-;

j-;

while(tot & lt;=n*n){

我& lt0?I = n-1:I = I;

j & lt0?j = n-1:j = j;

if(a[i][j]){

I = x;

j = y+1;

}

a[I][j]= ++ tot;

x = I;

y = j;

I-;

j-;

}

for(I = 0;?我& ltn;?i++){

for(j = 0;?j & ltn;?j++)

cout & lt& ltsetw(3)& lt;& lta[I][j];

cout & lt& ltendl

}

回歸?0;

}

//(2)求單和偶的幻方。

# include & ltiostream.h & gt

# include & ltiomanip.h & gt

int?main(){

int?n,i=0,j=0,a[100][100],tot = 0;

cout & lt& lt"請輸入4的倍數"

CIN & gt;& gtn;

for(I = 0;?我& ltn;?i++)

for(j = 0;?j & ltn;?j++){

a[I][j]= ++ tot;

}

for(I = 0;?我& ltn;?i++){

for(j = 0;?j & ltn;?j++){

if(i%4==j%4||i%4+j%4==3)

a[I][j]= n * n+1-a[I][j];

}

}

for(I = 0;?我& ltn;?i++){

for(j = 0;?j & ltn;?j++){

cout & lt& ltsetw(4)& lt;& lta[I][j];

}

cout & lt& ltendl

}

回歸?0;

}

  • 上一篇:電競北京2021·王者榮耀世界冠軍杯圓滿落幕,重慶QGhappy勇奪桂冠!
  • 下一篇:小學英語思維導圖,直接要圖。。 五年級的, 要求壹目了然。不許發怎麽怎麽做。
  • copyright 2024編程學習大全網