2016年蓝桥C组真题

1.有奖猜谜
小明很喜欢猜谜语。最近,他被邀请参加了X星球的猜谜活动。每位选手开始的时候都被发给777个电子币。规则是:猜对了,手里的电子币数目翻倍,猜错了,扣除555个电子币, 扣完为止。小明一共猜了15条谜语。战果为:vxvxvxvxvxvxvvx其中v表示猜对了,x表示猜错了。
请你计算一下,小明最后手里的电子币数目是多少。请填写表示最后电子币数目的数字。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
public class 有奖猜谜 {

public static void main(String[] args) {
	// TODO Auto-generated method stub

	int x = 777;
	String s = "vxvxvxvxvxvxvvx";
	for (int i = 0; i < 15; i++) {
		if (s.charAt(i) == 'v') {
			x = 2 * x;
		} else
			x = x - 555;
	}
	System.out.println(x);
}

}

2.煤球数目
有一堆煤球,堆成三角棱锥形。具体:
第一层放1个,
第二层3个(排列成三角形),
第三层6个(排列成三角形),
第四层10个(排列成三角形),

如果一共有100层,共有多少个煤球?
请填表示煤球总数目的数字。
public class 煤球数目 {

public static void main(String[] args) {
	// TODO Auto-generated method stub

	int i = 1;
	int j = 2;
	int count = 1;
	int sum = 1;
	for (int k = 2; k <= 100; k++) {
		count += j;
		j++;
		sum = sum + count;
	}
	System.out.println(sum);
}

}

3.平方怪圈

如果把一个正整数的每一位都平方后再求和,得到一个新的正整数。
对新产生的正整数再做同样的处理。

如此一来,你会发现,不管开始取的是什么数字,
最终如果不是落入1,就是落入同一个循环圈。

请写出这个循环圈中最大的那个数字。

请填写该最大数字。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
【分析】数位基本操作(分离&逐位累加求和)+找规律

public class 平方怪圈 {

public static void main(String[] args) {
	int start = 3;
	int ant = 0;
	while (ant < 1000) {
		System.out.println(start);
		start = extract(start);
		ant++;
	}
}

static int extract(int start) {
	String str = start + "";// 整数转字符串,i+""
	int ans = 0;
	for (int i = 0; i < str.length(); ++i) {
		ans += (str.charAt(i) - '0') * (str.charAt(i) - '0');
	}
	return ans;
}

}

4.骰子游戏

我们来玩一个游戏。
同时掷出3个普通骰子(6个面上的数字分别是1~6)。
如果其中一个骰子上的数字等于另外两个的和,你就赢了。

下面的程序计算出你能获胜的精确概率(以既约分数表示)

public class 骰子游戏 {

public static int gcd(int a, int b) {
	if (b == 0)
		return a;
	else
		return gcd(b, a % b);
}

public static void main(String[] args) {
	// TODO Auto-generated method stub
	int n = 0;
	for (int i = 0; i < 6; i++) {
		for (int j = 0; j < 6; j++) {
			for (int k = 0; k < 6; k++) {
				if (i + j + 1 == k || i + k + 1 == j || j + k + 1 == i) {
					n++;
				}
			}
		}
	}
	int m = gcd(n, 6 * 6 * 6);
	System.out.println(n / m + "/" + 6 * 6 * 6 / m);

}

}

6.凑算式

 B      DEF

A + — + ------- = 10
C GHI

(如果显示有问题,可以参见【图1.jpg】)

这个算式中AI代表19的数字,不同的字母代表不同的数字。

比如:
6+8/3+952/714 就是一种解法,
5+3/1+972/486 是另一种解法。

这个算式一共有多少种解法?

注意:你提交应该是个整数,不要填写任何多余的内容或说明性文字。

【分析】循环+枚举

    A~I代表1~9 9个数字,因此可使用全排列代替传统的9重循环枚举,并且不需手动实现去重,更加高效。
    此外,B/C和DEF/GHI不一定是整数,因此在计算A+ B/C + DEF/GHI之和时,结果与10需进行实数(浮点数)的大小比较,以避免精度问题影响结果。

public class 凑算式1 {

static int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
static int ans;

static boolean check() {
	int x = a[3] * 100 + a[4] * 10 + a[5];
	int y = a[6] * 100 + a[7] * 10 + a[8];
	if ((a[1] * y + a[2] * x) % (y * a[2]) == 0 && a[0] + (a[1] * y + a[2] * x) / (y * a[2]) == 10) {
		return true;
	}
	return false;
}

static void f(int k) {
	if (k == 9) {
		if (check()) {
			ans++;
		}
	}
	for (int i = k; i < 9; ++i) {
		{
			int t = a[i];
			a[i] = a[k];
			a[k] = t;
		}
		f(k + 1);
		{
			int t = a[i];
			a[i] = a[k];
			a[k] = t;
		}
	}

}

public static void main(String[] args) {
	f(0);
	System.out.println(ans);

}

}

7.小明最近喜欢搭数字积木,
一共有10块积木,每个积木上有一个数字,0~9。
搭积木规则:
每个积木放到其它两个积木的上面,并且一定比下面的两个积木数字小。
最后搭成4层的金字塔形,必须用完所有的积木。
下面是两种合格的搭法:
0
1 2
3 4 5
6 7 8 9

0
3 1
7 5 2
9 8 6 4

请你计算这样的搭法一共有多少种?
请填表示总数目的数字。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

public class 搭积木 {

static int a[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
static int ans = 0;

private static void f(int k) {
	if (k == 10) {
		ans++;
	}
	for (int i = k; i < 10; i++) {
		swap(k, i);
		if (k == 1 && a[1] < a[0] || k == 2 && a[2] < a[0] || k == 3 && a[3] < a[1]
				|| k == 4 && (a[4] < a[1] || a[4] < a[2]) || k == 5 && a[5] < a[2] || k == 6 && a[6] < a[3]
				|| k == 7 && (a[7] < a[3] || a[7] < a[4]) || k == 8 && (a[8] < a[4] || a[8] < a[5])
				|| k == 9 && a[9] < a[5]) {
			swap(k, i);
			continue;
		}
		f(k + 1);
		swap(k, i);
	}
}

private static void swap(int k, int i) {
	int t = a[i];
	a[i] = a[k];
	a[k] = t;

}

public static void main(String[] args) {
	// TODO Auto-generated method stub

	f(0);
	System.out.println(ans);
}

}

冰雹数
任意给定一个正整数N,
如果是偶数,执行: N / 2
如果是奇数,执行: N * 3 + 1
生成的新的数字再执行同样的动作,循环往复。
通过观察发现,这个数字会一会儿上升到很高,
一会儿又降落下来。
就这样起起落落的,但最终必会落到“1”
这有点像小冰雹粒子在冰雹云中翻滚增长的样子。
比如N=9
9,28,14,7,22,11,34,17,52,26,13,40,20,10,5,16,8,4,2,1
可以看到,N=9的时候,这个“小冰雹”最高冲到了52这个高度。

输入格式:
一个正整数N(N<1000000)
输出格式:
一个正整数,表示不大于N的数字,经过冰雹数变换过程中,最高冲到了多少。

例如,输入:
10
程序应该输出:
52

再例如,输入:
100
程序应该输出:
9232

import java.util.Scanner;

public class 冰雹数 {

public static void main(String args[]) {
	int n = new Scanner(System.in).nextInt();
	int t = 1;
	for (int i = 1; i < n; i++) {
		int max = fun(i, i);
		if (max > t)
			t = max;
	}

	System.out.print(t);

}

public static int fun(int n, int max) {

	if (n == 1) {
		return max;
	} else {
		if (n % 2 == 0) {
			// 偶数
			n = n / 2;
			if (n > max)
				max = n;
			return fun(n, max);
		} else {
			// 奇数
			n = n * 3 + 1;
			if (n > max)
				max = n;
			return fun(n, max);
		}
	}

}

}

9.四平方和

四平方和定理,又称为拉格朗日定理:
每个正整数都可以表示为至多4个正整数的平方和。
如果把0包括进去,就正好可以表示为4个数的平方和。

比如:
5 = 0^2 + 0^2 + 1^2 + 2^2
7 = 1^2 + 1^2 + 1^2 + 2^2
(^符号表示乘方的意思)

对于一个给定的正整数,可能存在多种平方和的表示法。
要求你对4个数排序:
0 <= a <= b <= c <= d
并对所有的可能表示法按 a,b,c,d 为联合主键升序排列,最后输出第一个表示法

程序输入为一个正整数N (N<5000000)
要求输出4个非负整数,按从小到大排序,中间用空格分开

例如,输入:
5
则程序应该输出:
0 0 1 2

再例如,输入:
12
则程序应该输出:
0 2 2 2

再例如,输入:
773535
则程序应该输出:
1 1 267 838

import static java.lang.Math.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class 四平方和 {

static int n;
static Map<Integer, Integer> cache = new HashMap<Integer, Integer>();

public static void main(String[] args) {
	Scanner sc = new Scanner(System.in);
	int n = sc.nextInt();
	for (int c = 0; c * c <= n / 2; ++c) {
		for (int d = c; c * c + d * d <= n; d++) {
			if (cache.get(c * c + d * d) == null)
				cache.put(c * c + d * d, c);
		}
	}
	for (int a = 0; a * a <= n / 4; ++a) {
		for (int b = a; a * a + b * b <= n / 2; ++b) {
			if (cache.get(n - a * a - b * b) != null) {
				int c = cache.get(n - a * a - b * b);
				int d = (int) sqrt(n - a * a - b * b - c * c);
				System.out.printf("%d %d %d %d\n", a, b, c, d);
				return;

			}
		}
	}
}

}

猜你喜欢

转载自blog.csdn.net/weixin_42487387/article/details/88629304