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

/*
 * 如图【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秒.

时间: 04-06

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

蓝桥杯 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

第五届蓝桥杯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等分,发现刚好缺少一个

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

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

第五届蓝桥杯练习题 - 入门练习Java解题代码

>>入门训练 圆的面积 时间限制:1.0s   内存限制:256.0MB 锦囊1 锦囊2 锦囊3 问题描述 给定圆的半径r,求圆的面积. 输入格式 输入包含一个整数r,表示圆的半径. 输出格式 输出一行,包含一个实数,四舍五入保留小数点后7位,表示圆的面积. 说明:在本题中,输入是一个整数,但是输出是一个实数. 对于实数输出的问题,请一定看清楚实数输出的要求,比如本题中要求保留小数点后7位,则你的程序必须严格的输出7位小数,输出过多或者过少的小数位数都是不行的,都会被认为错误. 实数输出的问题

第五届蓝桥杯软件大赛C/C++本科B组决赛解题报告

mnesia在频繁操作数据的过程可能会报错:** WARNING ** Mnesia is overloaded: {dump_log, write_threshold},可以看出,mnesia应该是过载了.这个警告在mnesia dump操作会发生这个问题,表类型为disc_only_copies .disc_copies都可能会发生. 如何重现这个问题,例子的场景是多个进程同时在不断地mnesia:dirty_write/2 mnesia过载分析 1.抛出警告是在mnesia 增加dump

地宫取宝----第五届蓝桥杯

/* * 标题:地宫取宝 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每一个格子放一件宝贝.每一个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被带到地宫的入口,国王要求他仅仅能向右或向下行走. 走过某个格子时,假设那个格子中的宝贝价值比小明手中随意宝贝价值都大,小明就能够拿起它(当然,也能够不拿). 当小明走到出口时,假设他手中的宝贝恰好是k件,则这些宝贝就能够送给小明. 请你帮小明算一算,在给定的局面下.他有多少种不同的行动方案能获得这k件宝贝. [数据格式] 输入一

2014年第五届蓝桥杯试题C/C++程序设计B组——奇怪的分式

题目描述: 标题:奇怪的分式 上小学的时候,小明经常自己发明新算法.一次,老师出的题目是: 1/4 乘以 8/5 小明居然把分子拼接在一起,分母拼接在一起,答案是:18/45 (参见图1.png) 老师刚想批评他,转念一想,这个答案凑巧也对啊,真是见鬼! 对于分子.分母都是 1~9 中的一位数的情况,还有哪些算式可以这样计算呢? 请写出所有不同算式的个数(包括题中举例的). 显然,交换分子分母后,例如:4/1 乘以 5/8 是满足要求的,这算做不同的算式. 但对于分子分母相同的情况,2/2 乘以

2014年第五届蓝桥杯试题C/C++程序设计B组——打印图像

题目描述:标题:打印图形 小明在X星球的城堡中发现了如下图形和文字:rank=3 rank=5 ran=6 小明开动脑筋,编写了如下的程序,实现该图形的打印. 程序代码: #define N 70 void f(char a[][N], int rank, int row, int col){ //rank等于1的情形 if(rank==1){ a[row][col] = '*'; return; } int w = 1; int i; for(i=0; i<rank-1; i++) w *=