两个数的最小公倍和最大公约数问题
1
输出"魔方阵",所谓魔方阵是指这样的方阵,它的每一行,每一列和对角线之和均相等.例如,三阶魔方阵为:
2
8 1 6
3
3 5 7
4
4 9 2
5
要求输出1~n*n的自然数构成的魔方阵。
6
7
/*该程序用于解决魔方阵问题*/
8
/*编写者:FreeFox*/
9
/*2006-10-29*/
10
#include <stdio.h>
11
#define MAX 16
12
int 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 ***************/
输出"魔方阵",所谓魔方阵是指这样的方阵,它的每一行,每一列和对角线之和均相等.例如,三阶魔方阵为:2
8 1 63
3 5 74
4 9 25
要求输出1~n*n的自然数构成的魔方阵。6
7
/*该程序用于解决魔方阵问题*/8
/*编写者:FreeFox*/9
/*2006-10-29*/10
#include <stdio.h>11
#define MAX 1612
int 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
else51
{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 ***************/



浙公网安备 33010602011771号