c語言幻方判斷,C語言幻方

本文目錄一覽:

c語言幻方

1.每個自然數只出現一次,沒有考慮

2.數組下標從0開始

3.

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

{

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

{

if(j==i) s1=s1+a[i][j];

if(i+j==n+1) s2=s2+a[i][j];

}

}

這樣沒必要

for(i=0;in;i++)

{

s1+=a[i][i];

s2+=a[i][n-1-i];

}

c語言題目,輸入一個N*N的矩陣,判斷該矩陣是否為幻方矩陣,跪求,跪求,腦已殘

#include stdio.h

#include stdlib.h

int main() 

{

int n,i,k,p;

long sn0,sn1,sn2,sn3,sn4;

printf(“Input n:”);

scanf(“%d”,n);

int m[n][n];

for(i=0;in;++i){

for(k=0;kn;++k){

printf(“Input M[%d,%d]:”,i,k);

scanf(“%d”,m[i][k]);

}

}

sn0=0;sn1=0;sn2=0;sn3=0;sn4=0;

for(i=0;in;++i){

sn0+=m[0][i];

}

p=1;

printf(“%ld\n”,sn0);

for(i=0;in;++i){

sn1=0;

sn2=0;

for(k=0;kn;++k){

sn1+=m[i][k];

sn2+=m[k][i];

}

if(sn1!=sn0 || sn2!=sn0){

p=0;

break;

}

sn3+=m[i][i];

sn4+=m[i][n-i-1];

}

if(sn3 != sn0 || sn4!=sn0)

p=0;

if(p==1){

printf(“Yes!\n”);

}else{

printf(“No!\n”);

}

return 0;

}

怎樣用C語言編寫幻方

你的這個問題實際上包括兩個問題:

1、幻方的演算法

2、怎樣用C語言實現幻方的演算法

這兩個問題是大不同的。

關於幻方的演算法,或者叫幻方填法,目前有很多種,拉丁正交、馬步法等等,針對奇數或者偶數(又分單偶數和雙偶數)等有不同的演算法,但這些演算法只是幫你找到幻方的一個或多個實例(不會是全部),而同階數的幻方到底有多少個,那只有用窮舉法了,比如4階幻方,基本4階幻方共7040個,剔除旋轉翻轉的,即具有獨立結構的共880個;4階完美幻方共84個,具有獨立結構的共48個。

對於高階幻方(比如超過8階),窮舉法實際上是不可行的,因為它的窮舉時間將是天文數字(以目前主流PC),所以不要試圖用計算機窮舉高階幻方的全部結果,那將是徒勞的。

如果你只是需要1個實例,那麼推薦你使用MATLAB語言工具,因為它提供了幻方函數magic(n),不需要編程,直接從命令窗口輸入就可以得到答案。

至於第二個問題,當然你首先會C語言,剩下的就是編程技巧問題了,而這個問題是無從回答的。相信你問的是第一個問題。

以上的回答雖然沒有明確給出答案,但相信對你會有幫助。

求幻方的C語言演算法!

你先看看吧:

3階幻方:

8 1 6

3 5 7

4 9 2

5階幻方:

17 24 1 8 15

23 5 7 14 16

4 6 13 20 22

10 12 19 21 3

11 18 25 2 9

#include stdio.h

#define N 5

void main()

{

int i,j,k,a[N][N];

for(i=0;iN;i++)

for(j=0;jN;j++)

a[i][j]=0; /*初始值為零*/

j=N/2;

a[0][j]=1; /*確定1的位置*/

for(k=2;k=N*N;k++)

{

i–;

j++;

if(i0)

i=N-1; /*行出界*/

else if(jN-1)

j=0; /*列出界*/

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

a[i][j]=k; /*按規律順序確定數值位置*/

else

{

i=(i+2)%N;

j=(j-1+N)%N;

a[i][j]=k; /*已有數字時數字的位置*/

}

}

printf(“\n\n”);

for(i=0;iN;i++)

{

printf(“\t”);

for(j=0;jN;j++)

printf(“%4d”,a[i][j]); /*顯示幻方陣*/

printf(“\n\n”);

}

return;

}

最好是自己研究下 ,印象比較深刻。

好好學習呀 其實我也只是個初學者

C語言編程幻方輸入問題

#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; iN; i++)

{ j=N-i-1; m1+=a[i][i]; m2+=a[i][j]; }

if(m1!=m2) return 0;

for(i=0; iN; i++) {

/**********found**********/

row=colum=0;

%判斷行row 列colum的和 是否相等 不相等返回0

for(j=0; jN; 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; iN; i++)

for(j=0; jN; j++) scanf(“%d”,x[i][j]);

printf(“Array:\n”);

%輸出矩陣

for(i=0; iN; i++)

{ for(j=0; jN; 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規則的矩陣輸入方法否可以啊??? 你看輸出矩陣那塊 輸出的矩陣跟你輸入的是不是一樣啊 要是一樣 結果都是對的 一般的就是 列之間用空格 行之間用回車 這段程序的重點是為什麼把 判斷對角線寫在前面吧????要是順序反了 判斷是不全面的

用C語言編一個簡單的程序來判斷N×N的矩陣是否為一個幻方。

#include”stdio.h”

#include”math.h”

 

int a[256][256];

int sum;

int check();

void ins(int n);

 

void main(){

  int i,j,n,k,t,p,x;

  scanf(“%d”,n);

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

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

    ins(n);

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

    k=n/2;

    ins(k);

    for(i=0; ik; i++)

      for(j=0; jk; 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; ik; i++)

      for(j=0; jk; j++){

        if((jt)(it)){

          p=a[i][j];

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

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

        }if((jt)(ik-t-1)){

          p=a[i][j];

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

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

        }if((i=ti=k-t-1)(j=tjt*2)){

          p=a[i][j];

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

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

        }if(j1j=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; in; i++)

      for(j=0; jn; j++)

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

    for(i=0; in; i++)

      for(j=0; jn; j++){

        if(i%4==0abs(i-j)%4==0)

          for(k=0; k4; k++)

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

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

          for(k=0; k4; k++)

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

      }

  }

  if(check(n)==1){

    for(i=0; in; i++){

      for(j=0; jn; j++)

        printf(“%5d”,a[i][j]);

      printf(“\n”);

    }

  }

}

int check(int n) { //檢驗是否是幻方

  int i,j,sum1=0,sum2;

  for(i=0; in; i++){

    for(j=0; jn; j++)

      sum1+=a[i][j];

    if(sum1!=sum)

      return 0;

    sum1=0;

  }

  for(i=0; in; i++){

    for(j=0; jn; j++)

      sum1+=a[i][j];

    if(sum1!=sum)

      return 0;

    sum1=0;

  }

  for(sum1=0,sum2=0,i=0,j=0; in; i++,j++){

    sum1+=a[i][j];

    sum2+=a[i][n-j-1];

  }

  if(sum1!=sum)

    return 0;

  if(sum2!=sum)

    return 0;

  else

    return 1;

}

void ins(int n) { //單偶數幻方的輸入

  int x,y,m;

  x=0;

  y=n/2;

  for(m=1; m=n*n; m++){

    a[x][y]=m;

    if(m%n!=0){

      x–;

      y++;

      if(x0)x=x+n;

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

    }else{

      x++;

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

    }

  }

}

// c++語言實現

//(1)求奇數幻方

#includeiostream.h

#includeiomanip.h

 

int main(){

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

  cout”請輸入一個奇數”endl;

  cinn;

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

  i–;

  j–;

  while(tot=n*n){

    i0?i=n-1:i=i;

    j0?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; in; i++){

    for(j=0; jn; j++)

      coutsetw(3)a[i][j];

    coutendl;

  }

  return 0;

}

//(2)求單偶幻方

#includeiostream.h

#includeiomanip.h

 

int main(){

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

  cout”請輸入4的倍數”endl;

  cinn;

  for(i=0; in; i++)

    for(j=0; jn; j++){

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

    }

  for(i=0; in; i++){

    for(j=0; jn; j++){

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

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

    }

  }

  for(i=0; in; i++){

    for(j=0; jn; j++){

      coutsetw(4)a[i][j];

    }

    coutendl;

  }

  return 0;

}

原創文章,作者:CDHA,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/144897.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
CDHA的頭像CDHA
上一篇 2024-10-26 11:54
下一篇 2024-10-26 11:54

相關推薦

  • AES加密解密演算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密演算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES演算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演著非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • Python語言由荷蘭人為中心的全能編程開發工程師

    Python語言是一種高級語言,很多編程開發工程師都喜歡使用Python語言進行開發。Python語言的創始人是荷蘭人Guido van Rossum,他在1989年聖誕節期間開始…

    編程 2025-04-28
  • Python語言設計基礎第2版PDF

    Python語言設計基礎第2版PDF是一本介紹Python編程語言的經典教材。本篇文章將從多個方面對該教材進行詳細的闡述和介紹。 一、基礎知識 本教材中介紹了Python編程語言的…

    編程 2025-04-28
  • Python語言實現人名最多數統計

    本文將從幾個方面詳細介紹Python語言實現人名最多數統計的方法和應用。 一、Python實現人名最多數統計的基礎 1、首先,我們需要了解Python語言的一些基礎知識,如列表、字…

    編程 2025-04-28
  • Python作為中心語言,在編程中取代C語言的優勢和挑戰

    Python一直以其簡單易懂的語法和高效的編碼環境而著名。然而,它最近的發展趨勢表明Python的使用範圍已經從腳本語言擴展到了從Web應用到機器學習等廣泛的開發領域。與此同時,C…

    編程 2025-04-28
  • Python基礎語言

    Python作為一種高級編程語言擁有簡潔優雅的語法。在本文中,我們將從多個方面探究Python基礎語言的特點以及使用技巧。 一、數據類型 Python基礎數據類型包括整數、浮點數、…

    編程 2025-04-28

發表回復

登錄後才能評論