【ZZULIOJ】1203: 做幻方
来源:互联网 发布:gephi用于什么数据分析 编辑:程序博客网 时间:2024/06/05 11:47
题目
1203: 做幻方
Time Limit: 1 Sec Memory Limit: 128 MB Submit: 388 Solved: 89
(https://acm.zzuli.edu.cn/zzuliacm/bbs.php?pid=1203)Description
Apple最近迷上了做幻方,Apple还是个中高手,只要你说个奇数N就能把N*N的幻方做出来。其实你可以比他做得更好的。Apple总是画得很乱,而你可以利用程序排得很整齐^_^ 幻方的要求:每一行,每一列,还有两条斜线上数字的和都相等.
Input
每行一个奇数N(0< N < 30),输入0结束
Output
输入一个奇数,输出一个幻方,顺序参照样板输出;同一列的数右对齐,数与数用一个空格分开;输出完以后加一个回车。
Sample Input
510
Sample Output
11 18 25 2 9
10 12 19 21 3
4 6 13 20 22
23 5 7 14 16
17 24 1 8 15
1
HINT
Source
思路
N 为奇数时,最简单:
⑴ 将1放在第一行中间一列;
⑵ 从2开始直到n×n止各数依次按下列规则存放:
按 45°方向行走,如向右上
每一个数存放的行比前一个数的行数减1,列数加1
⑶ 如果行列范围超出矩阵范围,则回绕。
例如1在第1行,则2应放在最下一行,列数同样加1;
⑷ 如果按上面规则确定的位置上已有数,或上一个数是第1行第n列时,
则把下一个数放在上一个数的下面。
例如:3阶的幻方
8 1 6
3 5 7
4 9 2
1.确定1的位置 累加1;
2.优先将值赋给自己右上角的位置(n为阶数-1)
特殊:如果右上角行下标<0 则赋值给同列最下面的位置
特殊:如果右上角列下表>n 则赋值给同行最左边的位置
3.如果上述位置被占领,则赋值给自己下面(行数不变列数+1;
代码
#include<stdio.h>#include<math.h>#define N 30int sqr(int m);int main(){ int m; while(scanf("%d", &m), m != 0) { sqr(m); } return 0;}int sqr(int m){ int a[N][N] = {0}; int x=0, y=0; int times, p, q, fmt; int i, j; x = m / 2; y = m - 1; times = m * m; for(i = 0 ; i < times ; i++) { a[y][x] = i + 1; p = x; q = y; x = x + 1; if(x == m) x = 0; y = y + 1; if(y == m) y = 0; if(a[y][x] != 0) { x = p; y = q - 1; } } fmt = log10(times); if(fmt == 0) { for(i = 0 ; i < m ; i++) { for(j = 0 ; j < m - 1 ; j++) { printf("%d ", a[i][j]); } printf("%d", a[i][m - 1]); printf("\n"); } } else if(fmt == 1) { for(i = 0 ; i < m ; i++) { for(j = 0 ; j < m - 1 ; j++) { printf("%2d ", a[i][j]); } printf("%2d", a[i][m - 1]); printf("\n"); } } else if(fmt == 2) { for(i = 0 ; i < m ; i++) { for(j = 0 ; j < m - 1; j++) { printf("%3d ", a[i][j]); } printf("%3d", a[i][m - 1]); printf("\n"); } } printf("\n"); return 0;}
U
- 【ZZULIOJ】1203: 做幻方
- zzulioj--1816
- ZZULIOJ--1798
- zzulioj-1895
- zzulioj-1899
- ZZULIOJ-1894
- 【zzulioj 1922】
- 【zzulioj 1921 】
- zzulioj 1919
- zzulioj 1875
- ZZULIOJ 2121
- ZZULIOJ 2123
- ZZULIOJ 2126
- zzulioj 2134
- 【ZZULIOJ 】 几道水题
- zzulioj 2174
- ZZULIOJ 1726: 迷宫
- zzulioj 1726: 迷宫
- Android硬件加速原理与实现简介
- BRDF Explorer
- 云授权重新定义互联网下的软件保护
- redis常用工具介绍
- 选择、直接插入、冒泡和希尔排序总结
- 【ZZULIOJ】1203: 做幻方
- echarts 随屏幕大小改变大小chart.resize()
- BZOJ 3038 上帝造题的七分钟2 BZOJ 3211 花神游历各国 题解
- 初学者的学习复习day_2
- Java学习笔记(22)--对象数组
- java commons库之一:基础库lang(1)
- Android高效加载大图、多图解决方案,有效避免程序OOM
- java规则引擎之easy rules源码阅读
- Codeforces 658C Bear and Forgotten Tree 3【思维】