FreeFoxCM

两个数的最小公倍和最大公约数问题

 

 1输出"魔方阵",所谓魔方阵是指这样的方阵,它的每一行,每一列和对角线之和均相等.例如,三阶魔方阵为:
 28 1 6
 33 5 7
 44 9 2
 5要求输出1~n*n的自然数构成的魔方阵。
 6 
 7/*该程序用于解决魔方阵问题*/
 8/*编写者:FreeFox*/
 9/*2006-10-29*/
10#include <stdio.h>
11#define MAX 16
12int main(void)
13{
14/******************************变量******************************/
15 int a[MAX][MAX];
16 int i,j,k,p,m,n;
17/****************************数据读取****************************/
18 p=1;  //表示阶数为偶数
19 while(p==1)   //若输入的数不符合要求,提示重新输入
20 {
21 printf("请你输入阶数(奇数)(1--%d):",MAX-1);
22 scanf("%d",&n);
23 if((n>=1&& (n<=15&& n%2!=0)
24 {
25  p=0;
26 }

27 }

28 /****************************数组初始化****************************/
29 for(i=1; i<=n; i++)
30 {
31 for(j=1; j<=n; j++)
32 {
33  a[i][j]=0;
34 }

35 }

36/**********************建立魔方阵,i表示行,j表示列*********************/
37 i=1;  /*1所在的行*/
38 j=(n/2)+1/*1所在的列*/
39 a[i][j]=1;  /*将1 放在第一行中间一列*/
40 for(k=2; k<=n*n; k++/*将2到n*n放到方阵中*/
41 {
42 i=i-1;     /*行数减1*/
43 j=j+1;  /*列数加1*/
44 
45 if(i<1 && j>n)  /*上一个数是第1行第n列时,则把下一个数放在上一个数的下面*/
46 {
47  i=i+2;  /*因为行数已经减1,所以需加2*/
48  j=j-1;  /*因为列数已经加1,所以需减1*/
49 }

50 else
51 {
52  if(i<1)   /*如果上一数的行数为1,则下一个数行为n(最下一行)*/
53  {
54   i=n;
55  }

56  if(j>n)  /*当上一个数列为n是时,则一下数的列数应为1,行数减1*/
57  {
58   j=1/*行数已经减1,所以不用再减*/
59  }

60 }

61 if(a[i][j]==0)
62 {
63  a[i][j]=k;
64 }

65 else  /*确定位置上已有数,则把下一个数放在上一个数的下面*/
66 {
67  i=i+2;
68  j=j-1;
69  a[i][j]=k;
70 }

71 }

72 /****************************输出魔方阵****************************/
73 for(i=1; i<=n; i++)
74 {
75 for(j=1; j<=n; j++)
76 {
77  printf("%4d",a[i][j]);
78 }

79 printf("\n");
80 }

81 return 0;
82}

83/************** CoryRight@2006 FreeFox All right reserved ***************/

posted on 2008-06-17 15:12  FreeFox  阅读(291)  评论(0)    收藏  举报