PREV-42_蓝桥杯_九宫幻方
- 问题描述
- 小明最近在教邻居家的小朋友小学奥数,而最近正好讲述到了三阶幻方这个部分,三阶幻方指的是将1~9不重复的填入一个3*3的矩阵当中,使得每一行、每一列和每一条对角线的和都是相同的。
- 三阶幻方又被称作九宫格,在小学奥数里有一句非常有名的口诀:“二四为肩,六八为足,左三右七,戴九履一,五居其中”,通过这样的一句口诀就能够非常完美的构造出一个九宫格来。
- 有意思的是,所有的三阶幻方,都可以通过这样一个九宫格进行若干镜像和旋转操作之后得到。现在小明准备将一个三阶幻方(不一定是上图中的那个)中的一些数抹掉,交给邻居家的小朋友来进行还原,并且希望她能够判断出究竟是不是只有一个解。
- 而你呢,也被小明交付了同样的任务,但是不同的是,你需要写一个程序~
- 输入格式
- 输入仅包含单组测试数据。
- 每组测试数据为一个3*3的矩阵,其中为0的部分表示被小明抹去的部分。
- 对于100%的数据,满足给出的矩阵至少能还原出一组可行的三阶幻方。
- 输出格式
- 如果仅能还原出一组可行的三阶幻方,则将其输出,否则输出“Too Many”(不包含引号)。
- 样例输入
- 样例输出
- 数据规模和约定
- 峰值内存消耗(含虚拟机) < 256M
- CPU消耗 < 1000ms
- 请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
- 注意:
- main函数需要返回0;
- 只使用ANSI C/ANSI C++ 标准;
- 不要调用依赖于编译环境或操作系统的特殊函数。
- 所有依赖的函数必须明确地在源文件中 #include <xxx>
- 不能通过工程设置而省略常用头文件。
- 提交程序时,注意选择所期望的语言类型和编译器类型。
- --------------
- 笨笨有话说:
- 我最喜欢这类题目了。既然九宫幻方一共也没有多少,我就不辞辛劳地一个一个写出来好了。
- 也不能太过分,好歹用个数组。
记:
"n阶幻方"题目似乎可以用同一个方法解决,具体没有去测试
附上另外一道4阶幻方题目
http://www.cnblogs.com/mind000761/p/8595379.html
示例代码:
- #include <stdio.h>
- #define MAX 9 /*可放置的最大数*/
- #define N 3 /*阶数*/
- int les = ;
- int key = ; /*1到MAX的累加和除以MAX*/
- int count = ; /*满足条件的解*/
- int arr[N+][N+] = {};
- int f[MAX+] = {};
- int ans[N+][N+] = {};/*存放解*/
- void dfs(int x)
- {
- int i,j,k,s;
- if (x > MAX-les)
- {
- /*剪枝*/
- i = arr[][]+arr[][]+arr[][];
- j = arr[][]+arr[][]+arr[][];
- if (i != key || j != key)
- {
- return;
- }
- for (i = ; i <= N ; i ++)
- {
- s = ;
- for (j = ; j <= N ; j ++)
- {
- s += arr[j][i];
- }
- if (s != key)
- {
- return;
- }
- }
- count ++;
- for (i = ; i <= N ; i ++)
- {
- for (j = ; j <= N ; j ++)
- {
- ans[i][j] = arr[i][j];
- }
- }
- return;
- }
- for (i = ; i <= MAX ; i ++)/*遍历1-MAX*/
- {
- if (!f[i])
- {
- for (j = ; j <= N ; j ++)
- {
- s = ;
- for (k = ; k <= N ; k ++)
- {
- if (!arr[j][k])
- {
- f[i] = ;
- arr[j][k] = i;
- break;
- }
- s += arr[j][k];
- }
- if (f[i])
- {
- break;
- }
- if (s != key)
- {
- return;
- }
- }
- dfs(x+);
- arr[j][k] = ;
- f[i] = ;
- }
- }
- return ;
- }
- int main(void)
- {
- int i,j;
- for (i = ; i <= N ; i ++)
- {
- for (j = ; j <= N ; j ++)
- {
- scanf("%d",&arr[i][j]);
- if (arr[i][j])
- {
- f[arr[i][j]] = ;
- les ++;
- }
- }
- }
- dfs();
- if (count == )
- {
- for (i = ; i <= N ; i ++)
- {
- for (j = ; j <= N ; j ++)
- {
- printf("%d ",ans[i][j]);
- }
- printf("\n");
- }
- }
- else
- {
- printf("Too Many");
- }
- return ;
- }
PREV-42_蓝桥杯_九宫幻方的更多相关文章
- ALGO-22_蓝桥杯_算法训练_数的划分(DP)
问题描述 将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序). 例如:n=,k=,下面三种分法被认为是相同的. ,,; ,,; ,,; 问有多少种不同的分法. 输入格式 n,k 输出格式 ...
- java实现第五届蓝桥杯六角幻方
六角幻方 里面的*在编写的时候会自动编译成线,这里就用代码的格式把题目弄过来 把 1 2 3 ... 19 共19个整数排列成六角形状,如下: * * * * * * * * * * * * * * ...
- 蓝桥杯_算法训练_ALGO10_集合运算
这个题实际上思路是比较简单的,但是需要注意细节问题. 思路:读入数组之后进行排序,然后再求交.并.补集. 首先排序:(使用的是冒泡排序) #include<iostream> using ...
- 蓝桥杯_算法训练_Torry的困惑(基本型)
这个题目就是求质数的乘积,在加一个模,思路比较简单,直接上代码: #include<iostream> using namespace std; bool isPrime(int a) { ...
- 蓝桥杯_算法训练_区间k大数查询
问题描述 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个. 输入格式 第一行包含一个数n,表示序列长度. 第二行包含n个正整数,表示给定的序列. 第三个包含一个正整数m,表示询问个数 ...
- ALGO-43_蓝桥杯_算法训练_A+B Problem
问题描述 输入A,B. 输出A+B. 输入格式 输入包含两个整数A,B,用一个空格分隔. 输出格式 输出一个整数,表示A+B的值. 样例输入 样例输出 数据规模和约定 -,,,<=A,B< ...
- ALGO-39_蓝桥杯_算法训练_数组排序去重
问题描述 输入10个整数组成的序列,要求对其进行升序排序,并去掉重复元素. 输入格式 10个整数. 输出格式 多行输出,每行一个元素. 样例输入 样例输出 解题思路: 若输入的数字存在数组中,剔除,否 ...
- ALGO-115_蓝桥杯_算法训练_和为T(枚举)
问题描述 从一个大小为n的整数集中选取一些元素,使得它们的和等于给定的值T.每个元素限选一次,不能一个都不选. 输入格式 第一行一个正整数n,表示整数集内元素的个数. 第二行n个整数,用空格隔开. 第 ...
- ALGO-117_蓝桥杯_算法训练_友好数
问题描述 有两个整数,如果每个整数的约数和(除了它本身以外)等于对方,我们就称这对数是友好的.例如: 9的约数和有:+= 4的约数和有:+= 所以9和4不是友好的. 220的约数和有: = 284的约 ...
随机推荐
- Codeforces Round #519
题目链接:传送门 A. Elections (思维+暴力) 思路: 从最小的k开始枚举就好了- -. #include <bits/stdc++.h> using namespace ...
- python学习之路02
1.python的数据类型有:Number String List Truple Sets Dictionary . 数字类型:int float bool complex 2.不可变数据:数字 字符 ...
- 2017.5.11 Yarn
Yarn在hadoop中的位置 Yarn的优点 YARN把JobTracker分为ResouceManager和ApplicationMaster,ResouceManager专管整个集群的资源管理和 ...
- spring管理
spring管理 SqlMapConfig.xml: <?xml version="1.0" encoding="UTF-8"?> <bean ...
- Go Example--通道遍历
package main import ( "fmt" ) func main() { queue := make(chan string, 2) queue <- &quo ...
- Go Example--协程
package main import "fmt" func main() { //main gorouting中调用f函数 f("direct") //重新建 ...
- LeetCode - Reorganize String
Given a string S, check if the letters can be rearranged so that two characters that are adjacent to ...
- 【usaco 2006 feb gold】 牛棚安排
终于自己独立做出来一道题QAQ然而本校数据实在太水不能确定我是不是写对了... 原题: Farmer John的N(1<=N<=1000)头奶牛分别居住在农场所拥有的B(1<=B&l ...
- NK实习项目配置
1.复制eclipse和项目 2.配置tomcat6,现在只能用tomcat6 3.tomcat6插件eclipse是默认有的,只需要配置一下 http://blog.csdn.net/u014079 ...
- Modern Data Lake with Minio : Part 1
转自:https://blog.minio.io/modern-data-lake-with-minio-part-1-716a49499533 Modern data lakes are now b ...