比赛的时候花了一个多小时,以做不做

分析:可观察:中间是(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) 【模拟】+【法】的更多相关文章

  1. HDU 1998 奇数阶魔方【模拟填数/注意边界和细节】

    奇数阶魔方 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  2. 算法:九宫格问题--奇数阶魔方(Magic-Square)

    一.魔方介绍 魔方(这里是简称,也可以叫幻方.魔术矩阵,Magic Square)是 n×n 正方形网格(n 为每侧的单元数),里面每个单元格填充了不同的正整数 1, 2, 3, ... , n2,并 ...

  3. hdu 1998 奇数阶魔方(找规律+模拟)

    应该不算太水吧. 17  24   1   8  15   23   5   7  14  16    4   6  13  20  22   10  12  19  21   3   11  18 ...

  4. 杭电ACM 1998奇数阶魔方

    #include<stdio.h>#include <string.h>int main(){ int n,m; int a[40][40]={0}; scanf(" ...

  5. 任意阶魔方阵(幻方)的算法及C语言实现

    写于2012.10: 本来这是谭浩强那本<C程序设计(第四版)>的一道课后习题,刚开始做得时候去网上找最优的算法,结果发现奇数和双偶数(4的倍数)的情况下算法都比较简单,但是单偶数(2的倍 ...

  6. n阶魔方阵(奇数阵)的输出

    需求 要求输出1~n²的自然数构成的魔方阵. STEP 1 什么是魔方阵? 魔方阵,古代又称“纵横图”,是指组成元素为自然数1.2…n2的平方的n×n的方阵,其中每个元素值都不相等,且每行.每列以及主 ...

  7. 【C++小白成长撸】--(续)单偶数N阶魔方矩阵

    1 /*程序的版权和版本声明部分: **Copyright(c) 2016,电子科技大学本科生 **All rights reserved. **文件名:单偶数N阶魔方矩阵 **程序作用:单偶数N阶魔 ...

  8. Java 实现奇数阶幻方的构造

    一.设计的流程图如下所示 二.Java 语言的代码实现 package MagicSquare; //奇数幻方的实现 public class Magic_Odd { //n 为幻方的阶数 publi ...

  9. hdu1998 bjfu1272奇数阶幻方构造

    这题就是一个sb题,本来很水,硬是说得很含混.奇数阶幻方构造其实有好多方法,这题既不special judge,也不说清楚,以为这样能把水题变成难题似的,简直想骂出题人. /* * Author : ...

随机推荐

  1. 遇过的坑(2)—MyISAM表类型不支持事务操作

    最近需要通过JDBC对数据库做事务型操作,实践时发现,并没有达到想要的效果,表现在:1.每次执行executeUpdate()后,数据就马上能在DB中查到.但按理来说,我还没执行commit(),DB ...

  2. c++ 按行读取txt文本

    CStdioFile 类的声明保存在 afx.h 头文件中. CStdioFile 类继承自 CFile 类, CStdioFile 对象表示一个用运行时的函数 fopen 打开的 c 运行时的流式文 ...

  3. java.util.concurrent.ThreadPoolExecutor

    java.util.concurrent.ThreadPoolExecutor An ExecutorService that executes each submitted task using o ...

  4. leetcode第一刷_Convert Sorted List to Binary Search Tree

    好,二叉搜索树粉末登场,有关他的问题有这么几个,给你一个n,如何求全部的n个节点的二叉搜索树个数?能不能把全部的这些二叉搜索树打印出来? 这道题倒不用考虑这么多,直接转即可了,我用的思想是分治,每次找 ...

  5. 从零開始学android&lt;ImageSwitcher图片切换组件.二十六.&gt;

    ImageSwitcher组件的主要功能是完毕图片的切换显示,比如用户在进行图片浏览的时候.能够通过button点击一张张的切换显示的图片,并且使用ImageSwitcher组件在每次切换的时候也能够 ...

  6. Android数据库高手秘籍(五)——LitePal的存储操作

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/39345833 经过前面几篇文章的学习,我们已经把LitePal的表管理模块的功能都 ...

  7. Drupal 7 电子邮件的发送设置 SMTP, Mail System, Mime Mail

    尽管Drupal自带发送email功能,可是非常多server须要SMTP验证.这个时候就须要安装 SMTP 模块. 激活 SMTP 模块 进入配置 admin/config/system/smtp ...

  8. Web中的性能优化

    优化Web中的性能 简介 web的优化就是一场阻止http请求最终访问到数据库的战争.优化的方式就是加缓存,在各个节点加缓存. web请求的流程及节点 熟悉流程及节点,才能定位性能的问题.而且优化的顺 ...

  9. Android Handler Message总结一下

    当应用程序启动时,会开启一个主线程(也就是UI线程).由她来管理UI.监听用户点击.来响应用户并分发事件等.所以一般在主线程中不要运行比較耗时的操作,如联网下载数据等,否则出现ANR错误.所以就将这些 ...

  10. ArcGIS SDE 10.1 for Postgresql 服务连接配置

    去年写了ArcGIS 10.1 如何连接Postgresql 数据库(http://blog.csdn.net/arcgis_all/article/details/8202709)当时采用的也是Ar ...