您的位置:

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;

}

c语言幻方判断,C语言幻方

2022-12-01
幻方奇数c语言,n阶奇数幻方C语言

2022-11-28
c语言完成奇数阶幻阵,c语言幻方矩阵

2022-11-26
c语言题操作题,c语言简答题

2023-01-03
奇数魔方c语言,C语言魔方

2023-01-04
c语言笔记讲解,c语言程序笔记

2022-11-23
c语言判断语,C语言判断语句which

2022-11-26
c语言有关ppt,C语言有关二元一次方程的代码

2022-11-29
基础c语言笔记,C语言笔记

2023-01-06
c语言知识笔记,c语言最全笔记

2023-01-04
c语言中占位符表格,c语言中占位符是啥

2023-01-06
c语言判断nn,C语言判断闰年

本文目录一览: 1、C语言怎样判断二维数组结束? 2、C语言里如何判断一个整形数据是几位数? 3、C语言编程:输入一个正整数n,判断它是否同时含有奇数字偶数字 4、c语言中一个判断结果如果符合输出0否

2023-12-08
c语言中质数的判断,质数判断C语言

2023-01-04
javac语言,C语言Java

2023-01-07
一篇c语言笔记,c语言入门笔记

2022-12-02
c到c语言笔记,cc在c语言

2022-11-27
潘神语言c语言,潘森编程语言

2022-11-29
c语言测试引擎,C语言程序测试网站

2022-11-27
c语言学习c++,学会C语言

2022-11-27
判断真假c语言,C语言怎么判断真假

本文目录一览: 1、C语言中如何表示“真”和“假”?系统如何判定一个量的“真”和“假... 2、C语言判断真假,求解析 3、C语言中,如何表示“真”还是“假”?系统如何判断一个量的“真”和“假”? 4

2023-12-08