题目
如图所示六角形中,填入1~12的数字。
使得每条直线上的数字之和都相同。
图中,已经替你填好了3个数字,请你计算星号位置所代表的数字是多少?
请通过浏览器提交答案,不要填写多余的内容。
全排列,暴力。(当然也可以手算)
总共12个数,填好了三个数,还剩九个数。(看到 9 我就想全排啊!!!)
规定从左到右,从上到下每行的空缺位置的索引从0开始增加,如下图:
索引为3处的值就是我们要填写的值。
我将剩下的九个值进行全排列,对于每一种排列方式,索引为0对应的值就表示在0处填上该值,索引为1对应的值就表示在1处填上该值,……。对于每一种排列方式(也即每一种填法),都判断每条线之和是否相等,如果相等说明我们找到了正确的排列方式(填法),输出索引为3处的值,就是答案。
判断每条线的和是否相等:
8 + a[0] + a[1] + a[2] // 头朝下三角形的底所在线
8 + a[3] + a[6] + 3 // 头朝下三角形的左腰所在线
a[2] + a[4] + s[7] + 3 // 头朝下三角形的右腰所在线
a[5] + a[6] + a[7] + a[8] // 头朝上三角形的底所在线
1 + a[0] + a[3] + a[5] // 头朝上三角形的左腰所在线
1 + a[1] + a[4] + a[8] // 头朝上三角形的右腰所在线
代码
#include
using namespace std;
// 1 3 8
// 2 4 5 6 7 9 10 11 12
/*
O(0) O(1) O(2)
O(3) O(4)
O(5) O(5) O(6) O(7)
// 括号内为索引
*/
int s[9] = {2, 4, 5, 6, 7, 9, 10, 11, 12};
int ans;
int main()
{
do {
int x1 = 8 + s[0] + s[1] + s[2];
int x2 = 8 + s[3] + s[6] + 3;
int x3 = s[2] + s[4] + s[7] + 3;
int x4 = s[5] + s[6] + s[7] + s[8];
int x5 = 1 + s[0] + s[3] + s[5];
int x6 = 1 + s[1] + s[4] + s[8];
if (x1 == x2 && x2 == x3 && x3 == x4 && x4 == x5 && x5 == x6)
cout
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?