六角填数---第五届蓝桥杯

/*
 * 如图【1.png】所看到的六角形中,填入1~12的数字。
 使得每条直线上的数字之和都同样。
 图中,已经替你填好了3个数字,请你计算星号位置所代表的数字是多少?
 请通过浏览器提交答案。不要填写多余的内容。
 */
public class 六角填数 {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		long start = System.currentTimeMillis();
		// 从上到下,从左到右,依次为数组赋值
		int[] a = new int[12];
		a = init(a);// 初始化数组
		int[] temp = new int[12];
		for (int i = 0; i < temp.length; i++) {
			temp[i] = i + 1;
		}// 初始化1~12数据提供数组,假设使用了,那么值为其绝对值的负数

		dsf(0, a, temp);

		long end = System.currentTimeMillis();
		print("此程序执行,花费的时间是" + ((end - start) / 1000.0) + "秒.");
	}

	public static void print(Object o) {
		System.out.println(o.toString());
	}
	// 初始化数组
	public static int[] init(int[] a) {
		a[0] = 1;
		a[1] = 8;
		a[11] = 3;
		return a;
	}
	public static int[] calculate(int[] a) {
		int[] b = new int[6];
		b[0] = 1 + a[2] + a[5] + a[7];
		b[1] = 8 + a[2] + a[3] + a[4];
		b[2] = 11 + a[5] + a[8];
		b[3] = 1 + a[3] + a[6] + a[10];
		b[4] = a[7] + a[8] + a[9] + a[10];
		b[5] = a[4] + a[6] + a[9] + 3;

		return b;
	}
	public static boolean isOk(int[] b) {
		for (int i = 0; i < b.length; i++) {
			for (int j = i + 1; j < b.length; j++) {
				if (b[i] != b[j])
					return false;
			}
		}
		return true;
	}

	public static void dsf(int deep, int[] a, int[] temp) {
		if (deep == 12)// 表示第13层,也就是a的值已经赋值完成
		{
			if (isOk(calculate(a))) {// int b[]=calculate(a);
				for (int i : a) {
					System.out.print(i + " ");
				}
				System.out.println();
			}
		} else {
			if (deep == 0 || deep == 1 || deep == 11) {
				dsf(deep + 1, a, temp);// 已经有的值,就不用再次赋值了
				return;
			}
			for (int i = 0; i < temp.length; i++) {
				if (i == 0 || i == 7 || i ==2) {//已经有的值,就不用再次赋值了
					continue;
				}
				if (temp[i] < 0)
					continue;
				a[deep] = temp[i];
				temp[i] = -temp[i];
				dsf(deep + 1, a, temp);
				temp[i] = -temp[i];
			}

		}

	}
}

运算结果:

1 8 9 2 7 10 12 6 5 4 11 3

此程序执行,花费的时间是0.087秒.

时间: 2024-08-08 04:43:09

六角填数---第五届蓝桥杯的相关文章

2014蓝桥杯——六角填数

标题:六角填数 如图所示六角形中,填入1~12的数字. 使得每条直线上的数字之和都相同. 图中,已经替你填好了3个数字,请你计算星号位置所代表的数字是多少? 请通过浏览器提交答案,不要填写多余的内容. 1 #include <iostream> 2 #include <cmath> 3 #include <cstdio> 4 #include <cstring> 5 using namespace std; 6 7 #define eps 10e-10 8

蓝桥杯 2014本科C++ B组 六角填数 枚举排列

标题:六角填数 如图[1.png]所示六角形中,填入1~12的数字. 使得每条直线上的数字之和都相同. 图中,已经替你填好了3个数字,请你计算星号位置所代表的数字是多少? 请通过浏览器提交答案,不要填写多余的内容. 简单的枚举排列,只要提前将12个结点标号,来判断六个线段总和是否相等. 代码如下: 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #define MAXN 13 5 int num

一日一练 六角填数

//六角填数 //2015-03-12 //[email protected] #include<iostream> #include<cstdio> #include<cstring> #include<cmath> using namespace std; #define eps 10e-10 #define N 15 static int A[N],vis[N]; static int t[7]; void dfs(int x) { if(x==1||

六角填数

如图[1.png]所示六角形中,填入1~12的数字. 使得每条直线上的数字之和都相同. 图中,已经替你填好了3个数字,请你计算星号位置所代表的数字是多少? 请通过浏览器提交答案,不要填写多余的内容. 参考答案:10

第五届蓝桥杯C/C++本科B组(真题试做)(6~8)

终于考完--不过挂科的铁定的了. 还是来做题吧. 前面八道题做起来都很简单. F: 标题:奇怪的分式 上小学的时候,小明经常自己发明新算法.一次,老师出的题目是: 1/4 乘以 8/5 小明居然把分子拼接在一起,分母拼接在一起,答案是:18/45 (参见图1.png) 老师刚想批评他,转念一想,这个答案凑巧也对啊,真是见鬼! 对于分子.分母都是 1~9 中的一位数的情况,还有哪些算式可以这样计算呢? 请写出所有不同算式的个数(包括题中举例的). 显然,交换分子分母后,例如:4/1 乘以 5/8

算法笔记_111:第五届蓝桥杯软件类省赛真题(Java本科A组)试题解答

 目录 1 猜年龄 2 李白打酒 3 神奇算式 4 写日志 5 锦标赛 6 六角填数 7 绳圈 8 兰顿蚂蚁 9 斐波那契 10 波动数列   前言:以下试题解答代码部分仅供参考,若有不当之处,还请路过的同学提醒一下~ 1 猜年龄 标题:猜年龄 小明带两个妹妹参加元宵灯会.别人问她们多大了,她们调皮地说:"我们俩的年龄之积是年龄之和的6倍".小明又补充说:"她们可不是双胞胎,年龄差肯定也不超过8岁啊." 请你写出:小明的较小的妹妹的年龄. 注意: 只写一个人的年龄数

算法笔记_206:第五届蓝桥杯软件类决赛真题(Java语言A组)

目录 1 海盗分金币 2 六角幻方 3 格子放鸡蛋 4 排列序数 5 幂一矩阵 6 供水设施   1 海盗分金币 有5个海盗,相约进行一次帆船比赛. 比赛中天气发生突变,他们被冲散了. 恰巧,他们都先后经过途中的一个无名的荒岛,并且每个人都信心满满,觉得自己是第一个经过该岛的人. 第一个人在沙滩上发现了一堆金币.他把金币分成5等份.发现刚好少一个金币.他就从自己口袋拿出一个金币补充进去,然后把属于自己的那份拿走. 第二个到达的人也看到了金币,他也和第一个人一样,把所有金币5等分,发现刚好缺少一个

第五届蓝桥杯C++本科A组

今天上午参加了第五届蓝桥杯比赛,还是去年的地方,还是去年的考场,不同的是经过了一年的历练,多了一份坦然与自信.不管最后结果如何,是对自己一年学习的一个小小的交代.ACMER IN HHUC, we never say no. 结果填空 1. a*a+b*b+c*c=1000;a,b,c均为整数,求一组解中的最小值.暴力的题目,很容易就想到了0,10,30.所以没多想就填上了0,可是考完发现还可以是负数...悲了个剧了,三分就这么水没了.. 2. 类似于往年的一道高斯的生日,求距离某一天(yyyy

第五届蓝桥杯全国软件设计大赛--2013年校内选拔赛Java题目

第五届蓝桥杯全国软件设计大赛 2013年校内选拔赛Java题目 一.考生注意: (1)[结果填空题]要求参赛选手根据题目描述直接填写结果.求解方式不限.不要求源代码. 把答案存入[考生文件夹]下对应题号的文件中即可. (2)[代码填空题]要求参赛选手在弄清给定代码工作原理的基础上填写缺失的部分,使得程序逻辑正确.完整.所填写的代码不超过一条语句(即中间不能出现分号). 把填空的答案(仅填空处的答案,不包括题面已存在的代码)存入[考生文件夹]下对应题号的文件中中即可. (3)[编程题]要求选手设计