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/n/144897.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
CDHACDHA
上一篇 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

发表回复

登录后才能评论