蓝桥杯 历届试题 九宫幻方
2018-03-31 17:35
344 查看
题目:九宫幻方
问题描述
小明最近在教邻居家的小朋友小学奥数,而最近正好讲述到了三阶幻方这个部分,三阶幻方指的是将1~9不重复的填入一个3*3的矩阵当中,使得每一行、每一列和每一条对角线的和都是相同的。
三阶幻方又被称作九宫格,在小学奥数里有一句非常有名的口诀:“二四为肩,六八为足,左三右七,戴九履一,五居其中”,通过这样的一句口诀就能够非常完美的构造出一个九宫格来。
4 9 2
3 5 7
8 1 6
有意思的是,所有的三阶幻方,都可以通过这样一个九宫格进行若干镜像和旋转操作之后得到。现在小明准备将一个三阶幻方(不一定是上图中的那个)中的一些数抹掉,交给邻居家的小朋友来进行还原,并且希望她能够判断出究竟是不是只有一个解。
而你呢,也被小明交付了同样的任务,但是不同的是,你需要写一个程序~
输入格式 输入仅包含单组测试数据。 每组测试数据为一个3*3的矩阵,其中为0的部分表示被小明抹去的部分。 对于100%的数据,满足给出的矩阵至少能还原出一组可行的三阶幻方。
输出格式 如果仅能还原出一组可行的三阶幻方,则将其输出,否则输出“Too Many”(不包含引号)。
样例输入0 7 20 5 00 3 0
样例输出6 7 21 5 98 3 4
数据规模和约定 峰值内存消耗(含虚拟机) < 256M CPU消耗 < 1000ms
思路:总共也就3*3个格子,成立的情况也没几种,所以不妨全部枚举出来用数组存一下,然后每一组和输入的情况相对比,对输入的情况来说,对应位置要么一样,要么就是0,否则就不是同一种情况。代码:
问题描述
小明最近在教邻居家的小朋友小学奥数,而最近正好讲述到了三阶幻方这个部分,三阶幻方指的是将1~9不重复的填入一个3*3的矩阵当中,使得每一行、每一列和每一条对角线的和都是相同的。
三阶幻方又被称作九宫格,在小学奥数里有一句非常有名的口诀:“二四为肩,六八为足,左三右七,戴九履一,五居其中”,通过这样的一句口诀就能够非常完美的构造出一个九宫格来。
4 9 2
3 5 7
8 1 6
有意思的是,所有的三阶幻方,都可以通过这样一个九宫格进行若干镜像和旋转操作之后得到。现在小明准备将一个三阶幻方(不一定是上图中的那个)中的一些数抹掉,交给邻居家的小朋友来进行还原,并且希望她能够判断出究竟是不是只有一个解。
而你呢,也被小明交付了同样的任务,但是不同的是,你需要写一个程序~
输入格式 输入仅包含单组测试数据。 每组测试数据为一个3*3的矩阵,其中为0的部分表示被小明抹去的部分。 对于100%的数据,满足给出的矩阵至少能还原出一组可行的三阶幻方。
输出格式 如果仅能还原出一组可行的三阶幻方,则将其输出,否则输出“Too Many”(不包含引号)。
样例输入0 7 20 5 00 3 0
样例输出6 7 21 5 98 3 4
数据规模和约定 峰值内存消耗(含虚拟机) < 256M CPU消耗 < 1000ms
思路:总共也就3*3个格子,成立的情况也没几种,所以不妨全部枚举出来用数组存一下,然后每一组和输入的情况相对比,对输入的情况来说,对应位置要么一样,要么就是0,否则就不是同一种情况。代码:
#include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<iostream> #include<algorithm> #include<string> #include<vector> #include<queue> #include<map> #include<set> using namespace std; bool test(char* s,char* p) { for(int i=0;i<9;i++) { if (s[i]==p[i]) continue; if (s[i]=='0') continue; return 0; } return 1; } char *IntToString(int n) { char *p=(char *)malloc(10*sizeof(char)); itoa(n,p,10); return p; } int main() { int i,j,num=0; char s[10]; for(i=0;i<9;i++) { int a; scanf("%d",&a); s[i]='0'+a; } char *p0=IntToString(492357816); char *p1=IntToString(834159672); char *p2=IntToString(618753294); char *p3=IntToString(276951438); char *p4=IntToString(294753618); char *p5=IntToString(438951276); char *p6=IntToString(816357492); char *p7=IntToString(672159834); char *pp[8]={p0,p1,p2,p3,p4,p5,p6,p7}; for(i=0;i<8;i++) { if(test(s,pp[i])) { for(j=0;j<9;j++) { printf("%c ",pp[i][j]); if((j+1)%3==0) printf("\n"); } } } for(i=0;i<8;i++) { if(pp[i]!=NULL) free(pp[i]); } return 0; }
相关文章推荐
- 蓝桥杯【历届试题】九宫重排
- 蓝桥杯 历届试题 九宫重排 解题报告(BFS,双向BFS优化)
- 历届试题 九宫重排 蓝桥杯
- 蓝桥杯 历届试题 九宫重排(bfs)
- 蓝桥杯 历届试题 九宫重排
- 蓝桥杯 历届试题 九宫重排 (八数码问题--康托展开去重 + bfs搜索)
- 蓝桥杯历届试题 九宫重排(输入输出方式选择)
- 蓝桥杯 历届试题 九宫重排
- 蓝桥杯历届试题——九宫重排(bfs)
- 蓝桥杯历届试题——九宫重排(启发式搜索)
- 蓝桥杯 历届试题 九宫重排
- 蓝桥杯 历届试题-九宫重排
- 蓝桥杯 历届试题 九宫重排 (广搜)
- [蓝桥杯][历届试题]九宫重排
- 蓝桥杯-历届试题-九宫重排-BFS+剪枝
- 蓝桥杯 历届试题 九宫重排 BFS Java
- 蓝桥杯, 历届试题 九宫重排 (八数码)
- 蓝桥杯 历届试题 九宫重排(双向搜索优化)
- 问题 1443: [蓝桥杯][历届试题]数字游戏
- 蓝桥杯 历届试题 国王的烦恼