2018第九届蓝桥杯大赛国赛(软件类)试题 A组

1.三角形面积

已知三角形三个顶点在直角坐标系下的坐标分别为:
(2.3, 2.5)
(6.4, 3.1)
(5.1, 7.2)

求该三角形的面积。

注意,要提交的是一个小数形式表示的浮点数。
要求精确到小数后3位,如不足3位,需要补零。
——————————————————————————————————————————————————————————
方法1:直接套公式
A、B、C 的坐标分别为 A(x1,y1)、B(x2,y2)、C(x3、y3),则
S=(x1y2-x1y3+x2y3-x2y1+x3y1-x2y2)
这个我相信没几个人能在考场上想到,所以还是老实的用下面的吧
方法2:
求出 ac 的长,再求出 b 到线段 ac 的垂直距离,用 底 * 高 / 2 求面积。
在这里插入图片描述
设直线 ac 的方程为 y = ax + b,带入 a , c 点的坐标求出系数 a, b
将 b 点坐标带入点到直线的距离公式。
在这里插入图片描述

public class Main {
    
    

	public static void main(String[] args) {
    
    
		double a = -41.0 / 13;
		double b = 7.2 - a * 5.1;
		double h = Math.abs(a * 2.3 - 2.5 + b) / Math.sqrt(a * a + 1);//b到ac的距离
		double di = Math.sqrt(Math.pow(5.1 - 6.4, 2) + Math.pow(7.2 - 3.1, 2));//ac的长
		double area = di * h / 2;
		System.out.printf("%.3f", area);
	}
}

答案:8.795

2.阅兵方阵

x国要参加同盟阅兵活动。
主办方要求每个加盟国派出的士兵恰好能组成 2 个方阵。
x国发现弱小的 y国派出了130人的队伍,他们的士兵在行进中可以变换2种队形:
130 = 81 + 49 = 9^2 + 7^2
130 = 121 + 9 = 11^2 + 3^2

x国君很受刺激,觉得x国面积是y国的6倍,理应变出更多队形。
于是他发号施令:
我们要派出一支队伍,在行进中要变出 12 种队形!!!

手下人可惨了,要忙着计算至少多少人才能组成 12 种不同的双方阵。
请你利用计算机的优势来计算一下,至少需要多少士兵。

(ps: 不要失去信心,1105人就能组成4种队形了)

注意,需要提交的是一个整数,表示至少需要士兵数目,不要填写任何多余的内容。

public class Main {
    
    

	public static void main(String[] args) {
    
    
		for (int i = 1105; i < 999999; i++) {
    
    //最开始试的9999和99999,都没有符合的数
			int cnt = f(i);
			if (cnt == 12) {
    
    
				System.out.println(i);
				return ;
			}
		}
		//System.out.println(f(130));
		//System.out.println(f(1105));
	}

	private static int f(int num) {
    
    
		int cnt = 0;
		for (int a = 1; a * a < num; a++) {
    
    //一开始写的 a<num 和 b<num,导致很久算不出结果
			for (int b = a + 1; b * b < num; b++) {
    
    
				if (a * a + b * b == num) cnt++;
			}
		}
		return cnt;
	}
}

约瑟夫环

n 个人的编号是 1~n,如果他们依编号按顺时针排成一个圆圈,从编号是1的人开始顺时针报数。
(报数是从1报起)当报到 k 的时候,这个人就退出游戏圈。下一个人重新从1开始报数。
求最后剩下的人的编号。这就是著名的约瑟夫环问题。

本题目就是已知 n,k 的情况下,求最后剩下的人的编号。

题目的输入是一行,2个空格分开的整数n, k
要求输出一个整数,表示最后剩下的人的编号。

约定:0 < n,k < 1百万

例如输入:
10 3

程序应该输出:
4

资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗 < 1000ms

请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。

注意:
main函数需要返回0;
只使用ANSI C/ANSI C++ 标准;
不要调用依赖于编译环境或操作系统的特殊函数。
所有依赖的函数必须明确地在源文件中 #include
不能通过工程设置而省略常用头文件。

提交程序时,注意选择所期望的语言类型和编译器类型。
——————————————————————————————————————————————————————
我是用的数组模拟,网上有用数学计算的最优解版本

import java.util.Scanner;

public class Main {
    
    
	static int[] cnt;//cnt[i]:i 的报数
	static boolean[] dead;//dead[i]:i 死了吗

	public static void main(String[] args) {
    
    
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int k = sc.nextInt();
		sc.close();
		
		cnt = new int[n + 5];
		dead = new boolean[n + 5];
		int num = 1, index = 1;//num是要报的数,index是当前下标
		int live = n;//活人数
		while (live > 1) {
    
    
			while (dead[index]) {
    
    
				index++;
				if (index == n + 1) index = 1;
				continue;
			}
			cnt[index] = num;
			if (cnt[index] == k) {
    
    
				dead[index] = true;
				live--;
				num = 1;
			} else {
    
    
				num++;
			}
			index++;
			if (index == n + 1) index = 1;
		}
		for (int i = 1; i <= n; i++) {
    
    
			if (!dead[i]) {
    
    
				System.out.println(i);
				break;
			}
		}
	}
}

自描述序列

小明在研究一个序列,叫Golomb自描述序列,不妨将其记作{G(n)}。这个序列有2个很有趣的性质:

  1. 对于任意正整数n,n在整个序列中恰好出现G(n)次。
  2. 这个序列是不下降的。

以下是{G(n)}的前几项:

n 1 2 3 4 5 6 7 8 9 10 11 12 13
G(n) 1 2 2 3 3 4 4 4 5 5 5 6 6

给定一个整数n,你能帮小明算出G(n)的值吗?
【输入】
一个整数n。
对于30%的数据,1 <= n <= 1000000
对于70%的数据,1 <= n <= 1000000000
对于100%的数据,1 <= n <= 2000000000000000
【输出】
一个整数G(n)
【样例输入】
13
【样例输出】
6
资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗 < 1000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
不要使用package语句。不要使用jdk1.7及以上版本的特性。
主类的名字必须是:Main,否则按无效代码处理。
———————————————————————————————————————————————————

import java.util.Scanner;

public class Main {
    
    
	static int[] dp;

	public static void main(String[] args) {
    
    
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		sc.close();
		
		dp = new int[n + 15];//n超出int范围时不适用
		dp[1] = 1;
		for (int i = 2; i <= n; i++) {
    
    
			dp[i] = 1 + dp[i - dp[dp[i - 1]]];
		}
		System.out.println(dp[n]);
	}
}

猜你喜欢

转载自blog.csdn.net/QinLaoDeMaChu/article/details/109341422