hdoj 2183 奇数阶魔方(II) 【模拟】+【法】
比赛的时候花了一个多小时,以做不做
分析:可观察:中间是(n*n+1)/2, 中间的上面是n*n,以下是1, 左边是n,右面是(n*n+1)-n,并且正对角线是最左上对到最右下端添加(+1)。另外一条对角线是最右上到最左下递减(-n) ,其它对角线也是这种规律。
难点:模拟的时候数据有点杂,非常easy搞错,要细心点。
心得:做题的时候要先确定思路是正确的,而且要履好思路之后在写程序。
代码:
#include <cstdio>
#include <cstring>
int s[25][25];
int n;
void leup(int x, int y){ //左上
int i;
i = 1;
while(i < x&&i < y){
s[x-i][y-i] = s[x-i+1][y-i+1]-1; ++i;
}
}
void rido(int x, int y){ //右下
int i = 1;
while(x+i<=n&&y+i<=n){
s[x+i][y+i] = s[x+i-1][y+i-1]+1; ++i;
}
}
void riup(int x, int y){//右上
int i = 1;
while(x-i>0&&y+i<=n){
s[x-i][y+i] = s[x-i+1][y+i-1]-n; ++i;
}
}
void ledo(int x, int y){//左下
int i = 1;
while(x+i<=n&&y-i>0){
s[x+i][y-i] = s[x+i-1][y-i+1]+n; ++i;
}
}
int main(){
int t;
scanf("%d", &t);
while(t --){
scanf("%d", &n);
int mid = n-n/2;
s[mid][mid] = (n*n+1)/2;
s[mid-1][mid] = n*n;
s[mid+1][mid] = 1;
s[mid][mid-1] = n;
s[mid][mid+1] = (n*n+1)-n;
leup(mid, mid);//对角线
ledo(mid, mid);
riup(mid, mid);
rido(mid, mid);
for(int i = 1; i < mid; ++i){ //垂直对角线上的点的线
//leup(mid, mid);
//ledo(mid, mid);
riup(mid-i, mid-i);
ledo(mid-i, mid-i);
ledo(mid+i, mid+i);
riup(mid+i, mid+i);
}
leup(mid, mid-1); //确定最接近对角线而且平行对角线的线
ledo(mid, mid-1);
rido(mid, mid+1);
riup(mid, mid+1); leup(mid-1, mid);
riup(mid-1, mid);
rido(mid+1, mid);
ledo(mid+1, mid); for(int i = 1; i < mid-1; ++i){ //垂直上面确定的线上的点的线
ledo(mid-i, mid-1-i);
riup(mid-1-i, mid-i);
ledo(mid+1+i, mid+i);
riup(mid+i-1, mid+i);
}
for(int i = 1; i <= n; ++ i){
for(int j = 1; j <= n; ++j){
printf("%4d", s[i][j]);
}
printf("\n");
}
}
return 0;
}
版权声明:本文博客原创文章。博客,未经同意,不得转载。
hdoj 2183 奇数阶魔方(II) 【模拟】+【法】的更多相关文章
- HDU 1998 奇数阶魔方【模拟填数/注意边界和细节】
奇数阶魔方 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- 算法:九宫格问题--奇数阶魔方(Magic-Square)
一.魔方介绍 魔方(这里是简称,也可以叫幻方.魔术矩阵,Magic Square)是 n×n 正方形网格(n 为每侧的单元数),里面每个单元格填充了不同的正整数 1, 2, 3, ... , n2,并 ...
- hdu 1998 奇数阶魔方(找规律+模拟)
应该不算太水吧. 17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 ...
- 杭电ACM 1998奇数阶魔方
#include<stdio.h>#include <string.h>int main(){ int n,m; int a[40][40]={0}; scanf(" ...
- 任意阶魔方阵(幻方)的算法及C语言实现
写于2012.10: 本来这是谭浩强那本<C程序设计(第四版)>的一道课后习题,刚开始做得时候去网上找最优的算法,结果发现奇数和双偶数(4的倍数)的情况下算法都比较简单,但是单偶数(2的倍 ...
- n阶魔方阵(奇数阵)的输出
需求 要求输出1~n²的自然数构成的魔方阵. STEP 1 什么是魔方阵? 魔方阵,古代又称“纵横图”,是指组成元素为自然数1.2…n2的平方的n×n的方阵,其中每个元素值都不相等,且每行.每列以及主 ...
- 【C++小白成长撸】--(续)单偶数N阶魔方矩阵
1 /*程序的版权和版本声明部分: **Copyright(c) 2016,电子科技大学本科生 **All rights reserved. **文件名:单偶数N阶魔方矩阵 **程序作用:单偶数N阶魔 ...
- Java 实现奇数阶幻方的构造
一.设计的流程图如下所示 二.Java 语言的代码实现 package MagicSquare; //奇数幻方的实现 public class Magic_Odd { //n 为幻方的阶数 publi ...
- hdu1998 bjfu1272奇数阶幻方构造
这题就是一个sb题,本来很水,硬是说得很含混.奇数阶幻方构造其实有好多方法,这题既不special judge,也不说清楚,以为这样能把水题变成难题似的,简直想骂出题人. /* * Author : ...
随机推荐
- tomcat启动Flash退出错误不能被视为解决该错误信息
tomcat 当有错误 启动startup.bat闪存在退出解决方案 打开 startup.bat 文件 最后 该start 阅读run watermark/2/text/aHR0cDovL2Jsb2 ...
- Oracle历史记录
请问如何查询ORACLE的历史操作记录!!!!!------解决方案-------------------- 有一个专门存储操作的数据库表..select t.SQL_TEXT, t.FIRST_LO ...
- Quartz时间配置
格式: [秒] [分] [小时] [日] [月] [周] [年] 序号 说明 是否必填 允许填写的值 允许的通配符 1 秒 是 0-59 , - * / 2 分 是 0-5 ...
- Xamarin 安装步骤
原文:Xamarin 安装步骤 1.下载并解压吾乐吧软件站提供的“Mono for Android 离线包” 安装:jdk-6u45-windows-i586.exe (就算你是64位系统,也要安装i ...
- python学习笔记之二:使用字符串
这里会介绍如何使用字符串格式化其他的值,并了解一下利用字符串的分割,连接,搜索等方法能做些什么. 1.基本字符串操作 所有标准的序列操作(索引,分片,乘法,判断成员资格,求长度,取最大值和最小值)对字 ...
- PL SQLDEVELOPMENT导出数据库脚本
Tools--export Tables--选择表--SQL Inserts-- watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaHprMTU2MjExMD ...
- 使用crontab创建 linux 系统定时任务#
任务1: 每隔1分钟,运行一次 /home/sn/yeelink.sh文件 ,用于上传数据到www.yeelink.net 1. 先在当时目录里面创建一个cronfile文件 vim cronfile ...
- Hive ERROR: Out of memory due to hash maps used in map-side aggregation
什么时候hive在运行大数据量的统计查询语句时.常常会出现以下OOM错误.详细错误提演示样例如以下: Possible error: Out of memory due to hash maps us ...
- 【设计模式】Template Method模式
OO基金会 封装 多态 继承 OO原则 封装变化 多用组合,少用继承 针对接口编程.不针对实现编程 为交互对象的松耦合设计而努力 类应该对扩展开放,对改动关闭 依赖抽象,不要依赖详细类 仅仅和朋友交谈 ...
- 一道看似简单的sql需求(转)
听说这题难住大批高手,你也来试下吧.ps:博问里的博友提出的. 原始数据 select * from t_jeff t 简单排序后数据 select * from t_jeff t order by ...