要求输出1~n*n的自然数构成的魔方阵。(n<15且为奇数)
2015-06-28 16:11
387 查看
【描述】
输出"魔方阵"。所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。例如,三阶魔方阵为
8 1 6
3 5 7
4 9 2
要求输出1~n*n的自然数构成的魔方阵。(n<15且为奇数)
【解题思路】
(1)第一个位置在第一行正中。
(2)新位置应处于 最近一个插入位置右上方,但如果右上方位置已超出方阵上边界,则新位置应选 列的最下一个位置;如果超出右边界,则新位置应选 行的最左一个位置。
(3)若最近一个插入元素为N的整数倍,则选下面一行同列上的位置为新位置。
【C语言】
#include<stdio.h>
#define MAX 15
int main() {
int n;
int m = 1;
int i, j;
int a[MAX][MAX];
scanf("%d", &n);
i = 0;
j = (n + 1) / 2 - 1; //(1)
while (m <= n * n) { //(2)
a[i][j] = m;
m++;
i--;
j++;
if ((m - 1) % n == 0 && m > 1) {
i = i + 2; //(3)
j = j - 1;
}
if (i < 0) //超出上界
i = i + n; //(4)
if (j > (n - 1)) //超出右边界
j = j - n; //(5)
}
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++)
printf("%d\t", a[i][j]);
printf("\n");
}
return 0;
}
输出"魔方阵"。所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。例如,三阶魔方阵为
8 1 6
3 5 7
4 9 2
要求输出1~n*n的自然数构成的魔方阵。(n<15且为奇数)
【解题思路】
(1)第一个位置在第一行正中。
(2)新位置应处于 最近一个插入位置右上方,但如果右上方位置已超出方阵上边界,则新位置应选 列的最下一个位置;如果超出右边界,则新位置应选 行的最左一个位置。
(3)若最近一个插入元素为N的整数倍,则选下面一行同列上的位置为新位置。
【C语言】
#include<stdio.h>
#define MAX 15
int main() {
int n;
int m = 1;
int i, j;
int a[MAX][MAX];
scanf("%d", &n);
i = 0;
j = (n + 1) / 2 - 1; //(1)
while (m <= n * n) { //(2)
a[i][j] = m;
m++;
i--;
j++;
if ((m - 1) % n == 0 && m > 1) {
i = i + 2; //(3)
j = j - 1;
}
if (i < 0) //超出上界
i = i + n; //(4)
if (j > (n - 1)) //超出右边界
j = j - n; //(5)
}
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++)
printf("%d\t", a[i][j]);
printf("\n");
}
return 0;
}
相关文章推荐
- Lua和C语言的交互详解
- 关于C语言中参数的传值问题
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言内存对齐实例详解
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- 探讨C语言的那些小秘密之断言
- 深入探讨C语言中局部变量与全局变量在内存中的存放位置
- C语言泛型编程实例教程
- C语言中使用lex统计文本文件字符数
- 基于C语言fflush()函数的使用详解
- C语言单链队列的表示与实现实例详解
- 关于C语言除0引发的思考
- 深入分析C中不安全的sprintf与strcpy
- Lua教程(四):在Lua中调用C语言、C++的函数
- C语言求幂计算的高效解法
- C语言实现输入一颗二元查找树并将该树转换为它的镜像
- 12个关于C语言的有趣问答
- 探讨register关键字在c语言和c++中的差异