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

分析:可观察:中间是(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. RESTEasy:@FormParam、@PathParam、@QueryParam、@HeaderParam、@CookieParam、@MatrixParam说明

    在第一RESTEasy教程我们已经学习了基本的Web服务和休息我们已经测试了一个简单的REST风格的Web服务.在本教程中,我们将显示如何将Web应用程序元素(形式参数,查询参数和更多)为REST风格 ...

  2. •当对自己的技术足够自信的时候,拼的就是RP和面试技巧了(转)

    前言 三月真是一个忙碌的季节,刚刚开学就需要准备各种面试和笔试(鄙视).幸运的是,在长达一个月的面试内推季之后,终于同时拿到了阿里和腾讯的offer,还是挺开心的.突而想起久未更新的博客,就冒昧学一学 ...

  3. Android - 位置定位(Location)服务(Service)类的基本操作

    位置定位(Location)服务(Service)类的基本操作 本文地址: http://blog.csdn.net/caroline_wendy 定位服务(Location Service),能够确 ...

  4. Android应用Activity、Dialog、PopWindow、Toast窗体加入机制及源代码分析

    [工匠若水 http://blog.csdn.net/yanbober 转载烦请注明出处.尊重劳动成果] 1 背景 之所以写这一篇博客的原因是由于之前有写过一篇<Android应用setCont ...

  5. C的xml编程文章链接

    官方地址:http://www.xmlsoft.org/ http://hi.baidu.com/singyea/item/ed4d1c335a9527b8633aff82 http://os.chi ...

  6. 【甘道夫】Apache Hadoop 2.5.0-cdh5.2.0 HDFS Quotas 配额控制

    前言 HDFS为管理员提供了针对文件夹的配额控制特性,能够控制名称配额(指定文件夹下的文件&文件夹总数),或者空间配额(占用磁盘空间的上限). 本文探究了HDFS的配额控制特性,记录了各类配额 ...

  7. vs2012 它已停止工作 - 解决方案

    最近学习<Windows多媒体编程>本课程, 蛋疼, 学校原来是MFC... 然后安装vs2012.   后来又在几个插件.. 在这个问题. 开业,提示 vs2012 它已停止工作. wa ...

  8. slider使用TickPlacement获得游标效果

    <Slider Name="slider游标效果" Maximum="3" SmallChange="0.25" TickPlacem ...

  9. C++ 哈希表 (hashtable) 用于保存简单的数据,及数据查找,数据删除

    /*hashtable.h*/ #include<iostream> #include <string> #include<vector> using namesp ...

  10. Jenkins(转)

    1  修改jenkins的根目录,默认地在C:\Documents and Settings\AAA\.jenkins . .jenkins ├─jobs│  └─JavaHelloWorld│    ...