rmit university怎么样:c语言魔方阵

来源:百度文库 编辑:神马品牌网 时间:2024/04/29 06:37:10

所谓的魔方距阵就是一种特殊的奇数阶方阵:它的行,列,对角线,上的数字之和都要相等,且方阵中的每一个数字都不相等,且数字的范围都在1到n*n之间.
  我编的程序如下:
  #include<stdio.h>
  #define N 15
  main()
  {
  int i,j,row,cloum,size,square[N][N],count;
  clrscr();
  printf("please enter the square size(odd && <=15):\n");
  scanf("%d",&size);
  while(size%2==0||size>15||size<3)
  {
  printf("error due to the wrng input!please input it again!\n");
  scanf("%d",&size);
  }
  for(i=0;i<size;i++)
  for(j=0;j<size;j++)
  square[i][j]=0;
  i=0;j=(size-1)/2;
  square[i][j]=1;
  for(count=2;count<=size*size;count++)
  {
  row=i-1<0?(size-1):(i-1);
  cloum=j-1<0?(size-1):(j-1);
  if(square[row][cloum])
  i=(++i)%size;
  else
  {i=row;
  j=j-1<0?(size-1):(j-1);
  }
  square[i][j]=count;
  }
  printf("the %d square is:\n",size);
  for(i=0;i<size;i++)
  {
  for(j=0;j<size;j++)
  printf("%d",square[i][j]);
  printf("\n");
  }
  }

  只能求奇数的魔方阵
  #define N 20
  main()
  {
  int a[N][N];
  int n,i,j,r;
  scanf("%d",&n);
  for(i=0;i<N;i++) for(j=0;j<N;j++) a[i][j]=0;
  i=0;
  j=n/2;
  a[i][j]=1;
  for (r=2;r<=n*n;r++)
  if (a[(i+n-1)%n][(j+1)%n]==0)
  {i=(i+n-1)%n;j=(j+1)%n;a[i][j]=r;}
  else
  {i=(i+1)%n;a[i][j]=r;}
  for(i=0;i<n;i++)
  {
  for(j=0;j<n;j++) printf("%4d",a[i][j]);
  printf("\n");
  }
  }