问题描述
  小明最近在教邻居家的小朋友小学奥数,而最近正好讲述到了三阶幻方这个部分,三阶幻方指的是将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_蓝桥杯_九宫幻方的更多相关文章

  1. ALGO-22_蓝桥杯_算法训练_数的划分(DP)

    问题描述 将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序). 例如:n=,k=,下面三种分法被认为是相同的. ,,; ,,; ,,; 问有多少种不同的分法. 输入格式 n,k 输出格式 ...

  2. java实现第五届蓝桥杯六角幻方

    六角幻方 里面的*在编写的时候会自动编译成线,这里就用代码的格式把题目弄过来 把 1 2 3 ... 19 共19个整数排列成六角形状,如下: * * * * * * * * * * * * * * ...

  3. 蓝桥杯_算法训练_ALGO10_集合运算

    这个题实际上思路是比较简单的,但是需要注意细节问题. 思路:读入数组之后进行排序,然后再求交.并.补集. 首先排序:(使用的是冒泡排序) #include<iostream> using ...

  4. 蓝桥杯_算法训练_Torry的困惑(基本型)

    这个题目就是求质数的乘积,在加一个模,思路比较简单,直接上代码: #include<iostream> using namespace std; bool isPrime(int a) { ...

  5. 蓝桥杯_算法训练_区间k大数查询

    问题描述 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个. 输入格式 第一行包含一个数n,表示序列长度. 第二行包含n个正整数,表示给定的序列. 第三个包含一个正整数m,表示询问个数 ...

  6. ALGO-43_蓝桥杯_算法训练_A+B Problem

    问题描述 输入A,B. 输出A+B. 输入格式 输入包含两个整数A,B,用一个空格分隔. 输出格式 输出一个整数,表示A+B的值. 样例输入 样例输出 数据规模和约定 -,,,<=A,B< ...

  7. ALGO-39_蓝桥杯_算法训练_数组排序去重

    问题描述 输入10个整数组成的序列,要求对其进行升序排序,并去掉重复元素. 输入格式 10个整数. 输出格式 多行输出,每行一个元素. 样例输入 样例输出 解题思路: 若输入的数字存在数组中,剔除,否 ...

  8. ALGO-115_蓝桥杯_算法训练_和为T(枚举)

    问题描述 从一个大小为n的整数集中选取一些元素,使得它们的和等于给定的值T.每个元素限选一次,不能一个都不选. 输入格式 第一行一个正整数n,表示整数集内元素的个数. 第二行n个整数,用空格隔开. 第 ...

  9. ALGO-117_蓝桥杯_算法训练_友好数

    问题描述 有两个整数,如果每个整数的约数和(除了它本身以外)等于对方,我们就称这对数是友好的.例如: 9的约数和有:+= 4的约数和有:+= 所以9和4不是友好的. 220的约数和有: = 284的约 ...

随机推荐

  1. 检测IP地址冲突的shell脚本-check_server_ip_conflict.sh

    check_server_ip_conflict.sh 使用arping获取对应IP地址的MAC地址,如果和预料的不一致则报警: #!/bin/bash epg_addr_01="00:50 ...

  2. hdoj-1022(栈的模拟)

    #include <iostream> #include <cstring> #include <algorithm> #include <stack> ...

  3. UE4 IOS 开发之传感器输入

    Iphone的传感器包括陀螺仪.加速计等. UE4提供了4个按键来收集这些传感器的3维数据.具体位置:ProjectSettings->Input. 其中Tilt数据可以反映Iphone目前的物 ...

  4. UVALive-6540 Fibonacci Tree

    #include<bits/stdc++.h> using namespace std; int n,m; struct edge { int x; int y; int len; }ed ...

  5. 《DSP using MATLAB》Problem 6.6

    代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...

  6. 利用JavaScript jQuery实现图片无限循环轮播(不借助于轮播插件)-----转载

    前言 作为一个前端工程师,无论公司是什么行业,无论你做什么端,基本都会遇到一个避不开的动画效果:循环轮播.做轮播并不难,市场上的轮播插件有很多,其中比较著名的是swiper,使用也非常简单.但轮播插件 ...

  7. ansible-playbook入门实例解析

    [root@localhost tlsit]# ansible-playbook a.yml PLAY [test] ***************************************** ...

  8. classLoader卸载与jvm热部署

    以下的相关介绍都是在未使用dcevm的情况 classLoader的卸载机制 jvm中没有提供class及classloader的unload方法.那热部署及osgi中是通过什么机制来实现的呢?实现思 ...

  9. 关于宽带接两台路由,并且第二台需要关闭DHCP的设置

    关于宽带接两台路由,并且第二台需要关闭DHCP的设置 https://wenku.baidu.com/view/e317a12d4b35eefdc8d333cb?pcf=2#1

  10. Kubernetes 知识点

    自己总结的 Kubernetes 的各模块(待补充) 各模块包含关系: namespace => node => pod => container table th:first-of ...