蓝桥2021 B组
2. 卡片(结果填空)
小蓝有很多数字卡片,每张卡片上都是数字 0 到 9。
小蓝准备用这些卡片来拼一些数,他想从 1 开始拼出正整数,每拼一个, 就保存起来,卡片就不能用来拼其它数了。
小蓝想知道自己能从 1 拼到多少。
例如,当小蓝有 30 张卡片,其中 0 到 9 各 3 张,则小蓝可以拼出 1 到 10, 但是拼 11 时卡片 1 已经只有一张了,不够拼出 11。
现在小蓝手里有 0 到 9 的卡片各 2021 张,共 20210 张,请问小蓝可以从 1 拼到多少?
代码实现:
package 第12届;
/*每张卡片上有数字0到9任一个数字,用这些卡片来拼一些数,从 1 开始拼出正整数,每拼一个,就保存起来,卡片就不能用来拼其它数了。
*每张卡片只能用一次,问:从 1 拼到多少? 就是必须连续地从1开始往后拼!!
*分析:
*11 是用两个 1 拼出来的
*也就是说这一堆卡片消耗到哪个数字时不能拼出来,我们就输出这个数字的前一个数字!!!
*思路:
*1. 0到9 的卡片各 2021 张,利用while循环从1开始遍历,把当前遍历的数的每一位都取出来
*2. 判断每一位所对应的数字卡片的数量是否为0,若为0,说明此数字不能被拼凑出来,输出这个数字的前一个数字,即减1
*3. 若不为0,当前位的卡片数减1,继续向后循环
*4. 此处不知到位数,用n%10 从个位开始取 n/10 得到少个位后的数
*5. 还有break 只退出最里层的循环哦!!*/
public class T2 {
public static void main(String[] args) {
//定义数组,下标i代表数字为i的卡片 数组值就是所对应的张数
int[] ka = new int[10];
boolean isOut = false;
//初始各有2021张
for(int i=0;i<=9;i++) {
ka[i] = 2021;
}
int numNow = 1;//当前要拼凑的数字
while(true) {//不知道拼凑次数
int n = numNow;
while(n>=1) {//不知道要取出多少位
if(ka[n%10]==0) {
System.out.println(numNow-1);
isOut = true;
break;
}
ka[n%10]--;
n = n/10;
}
if(isOut==true) {
break;
}
numNow++;
}
}
//3181
}
3. 直线(结果填空)
在平面直角坐标系中,两点可以确定一条直线。如果有多点在一条直线上, 那么这些点中任意两点确定的直线是同一条。
给定平面上 2 × 3 个整点 {(x, y)|0 ≤ x < 2, 0 ≤ y < 3, x ∈ Z, y ∈ Z},即横坐标 是 0 到 1 (包含 0 和 1) 之间的整数、纵坐标是 0 到 2 (包含 0 和 2) 之间的整数 的点。这些点一共确定了 11 条不同的直线。
给定平面上 20 × 21 个整点 {(x, y)|0 ≤ x < 20, 0 ≤ y < 21, x ∈ Z, y ∈ Z},即横坐标是 0 到 19 (包含 0 和 19) 之间的整数、纵坐标是 0 到 20 (包含 0 和 20) 之 间的整数的点。请问这些点一共确定了多少条不同的直线。
代码实现:
package 第12届;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/*对于直线表达式y = kx +b 当两条直线的斜率k和截距b不完全相同时,就认为是两条不同的直线
* 两点确定一条直线:
* 1. 将两个点的坐标带入直线解析式中,求解k=(y1-y2)/(x1-x2) 求解b:可以通过一个点和k计算而得。
* 2. 可以把k和b存入HashSet中,使得重复的直线只储存一个数据。
* 3. k和b可能是小数,而小数在计算机中是有精度的,直接存小数,哪怕用double型也可能不准确。
* 所以我们用分数存储k和b,即k=kup/kdown; b=bup/bdown 且要用最简分数表示,否则不好比较是否相同。求最简分数可以先通过求分子分母的最大公约数,再同时除以最大公约数。
* 4. 以kup+" “+kdown+” “+bup+” "+bdown的字符串形式将直线存入HashSet。(k分子/k分母+“”+b分子/b分母)
* 5. 把坐标存入容器ArrayList中,形式是x*100+y(一个int型的数据)这个数除以100就是横坐标,对100取余就是纵坐标。
*/
public class T3 {
public static void main(String[] args) {
Set<Integer> set = new HashSet<>();
// 将坐标以一个四位数的方式存入集合,x是百位千位,y是十位和个位。
for (int x = 0; x <= 19; x++) {
for (int y = 0; y <= 20; y++) {
set.add(x * 100 + y);
}
}
Set<String> ans = new HashSet<>();// 保存每一条直线的k+""+b
List<Integer> arr = new ArrayList<>(set);
int len = arr.size(); // 坐标个数
for (int i = 0; i < len; i++) {
int a = arr.get(i); // 取出一个坐标
for (int j = i + 1; j < len; j++) {
int b = arr.get(j); // 取出其他坐标
int x1 = a / 100, x2 = b / 100, y1 = a % 100, y2 = b % 100;
int up = y1 - y2, down = x1 - x2;
int c1 = gcd(up, down); // 求最大公约数
String k = (up / c1) + " " + (down / c1);// 斜率
if (down == 0) {
ans.add("x = " + x1); // 如果直线垂直与x轴则直接抛入ans集合,该情况共有19种。
continue;
}
int bup = y1 * down - up * x1;//b的分子 b的分母是down
int c2 = gcd(bup, down);
String B = (bup / c2) + " " + (down / c2);// 截距
ans.add(k + " " + B);
}
}
System.out.println(ans.size());//40257
}
// 求最大公约数
static int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a % b);
}
}
/*
* int bup = y1*down - up*x1;//b的分子 b的分母是down y1=(up/down)*x1+b b= y1 -(up/down)*x1 通分: y1*down /down - up*x1/down
*/
4. 货物摆放(结果填空)
小蓝有一个超大的仓库,可以摆放很多货物。
现在,小蓝有 n 箱货物要摆放在仓库,每箱货物都是规则的正方体。小蓝 规定了长、宽、高三个互相垂直的方向,每箱货物的边都必须严格平行于长、 宽、高。 小蓝希望所有的货物最终摆成一个大的立方体。即在长、宽、高的方向上 分别堆 L、W、H 的货物,满足 n = L × W × H。
给定 n,请问有多少种堆放货物的方案满足要求。 例如,当 n = 4 时,有以下 6 种方案:1×1×4、1×2×2、1×4×1、2×1×2、 2 × 2 × 1、4 × 1 × 1。
请问,当 n = 2021041820210418 (注意有 16 位数字)时,总共有多少种方案?
代码实现:
package 第12届;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
/*具体思路:就是求出这个大数的所有因数,然后随便取三个看能不能得到它,妥妥的全排列问题。
*核心考点是[如何快速找出一个大数的所有因数]??? */
/*对于一个数n,它除以某个数m余数为零,就可以得到两个因子,一个因子是m,另一个是n/m
*因为假设数m=p*q,且p≤q则m=p*q≥p*p即p≤√m所以m必有一个小于或等于其平方根的因数,所以如果要求一个数的所有因子,你只要走到小于等于它的开平方数*/
public class T4 {
public static void main(String[] args) {
Set<Long> set = new HashSet<>();
Long n = 2021041820210418L;// 结尾加l表示是一个long型数
Long end = (long) Math.sqrt(n);// 检索因子的最大范围
for (Long i = (long) 1; i <= end; i++) {
if (n % i == 0) {
set.add(i);
set.add(n / i);
}
}
ArrayList<Long> factor = new ArrayList<>(set);
int count = 0;
for (int i = 0; i < factor.size(); i++) {
long a = factor.get(i);
for (int j = 0; j < factor.size(); j++) {
long b = factor.get(j);
if (a * b > n) {
continue;
}
for (int k = 0; k < factor.size(); k++) {
long c = factor.get(k);
if (a * b * c == n) {
count++;
}
}
}
}
System.out.println(count);//2430
}
}
5. 路径:
6. 时间限制:
小蓝要和朋友合作开发一个时间显示的网站。在服务器上,朋友已经获取 了当前的时间,用一个整数表示,值为从 1970 年 1 月 1 日 00:00:00 到当前时 刻经过的毫秒数。
现在,小蓝要在客户端显示出这个时间。小蓝不用显示出年月日,只需要 显示出时分秒即可,毫秒也不用显示,直接舍去即可。
给定一个用整数表示的时间,请将这个时间对应的时分秒输出。
输入格式
输入一行包含一个整数,表示时间。
输出格式
输出时分秒表示的当前时间,格式形如 HH:MM:SS,其中 HH 表示时,值 为 0 到 23,MM 表示分,值为 0 到 59,SS 表示秒,值为 0 到 59。时、分、秒 不足两位时补前导 0。
样例输入 1
46800999
样例输出 1
13:00:00
样例输入 2
1618708103123
样例输出 2
01:08:23
代码实现:
package 第12届;
import java.util.Scanner;
/* 1s == 1000ms
* 思路是模拟 */
public class T5 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
long ms = scanner.nextLong();//注意开 long
//将单位小时和分用毫秒表示
long perhour = 60 * 60 * 1000;
long permin = 60 * 1000;
long hour = (ms/perhour)%24; // 保证小时在 [0, 23] 之内
ms = ms % perhour;//将小时数的余数,即剩下时间精确到分和秒
long minute = ms/permin;
ms = ms % permin;//将分钟数的余数,即剩下时间精确到秒
long sec = ms/1000;
System.out.format("%2s:%2s:%2s",check(hour),check(minute) ,check(sec));
}
public static String check(long x) {
return x<10 ? "0"+x : ""+x;
}
}
蓝桥2021 B组的更多相关文章
- 2018年第九届蓝桥杯B组题C++汇总解析-fishers
2018年第九届蓝桥杯B组题C++解析-fishers 题型 第一题:第几天 第二题:明码 第三题:乘积尾零 第四题:测试次数 第五题:快速排序 第六题:递增三元组 第七题:螺旋折线 第八题:日志统计 ...
- 黄金连分数|2013年蓝桥杯B组题解析第四题-fishers
黄金连分数 黄金分割数0.61803... 是个无理数,这个常数十分重要,在许多工程问题中会出现.有时需要把这个数字求得很精确. 对于某些精密工程,常数的精度很重要.也许你听说过哈勃太空望远镜,它首次 ...
- 啤酒和饮料|2014年蓝桥杯B组题解析第一题-fishers
啤酒和饮料|2014年第五届蓝桥杯B组题解析第一题-fishers 啤酒和饮料 啤酒每罐2.3元,饮料每罐1.9元.小明买了若干啤酒和饮料,一共花了82.3元. 我们还知道他买的啤酒比饮料的数量少,请 ...
- 2016年蓝桥杯B组C/C++省赛(预选赛)题目解析
2016年蓝桥杯B组C/C++ 点击查看2016年蓝桥杯B组省赛试题(无答案版) 第一题:煤球数目 题解 有一堆煤球,堆成三角棱锥形.具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个( ...
- 2016年蓝桥杯B组C/C++省赛(预选赛)试题
2016年蓝桥杯B组C/C++ 点击查看2016年蓝桥杯B组省赛题目解析(答案) 第一题:煤球数目 有一堆煤球,堆成三角棱锥形.具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成 ...
- 2018年蓝桥杯A组C/C++决赛题解
2018年第九届蓝桥杯A组C/C++决赛题解 点击查看视频题解 点击查看2018年蓝桥杯A组C/C++决赛题目(不含答案) 1:三角形面积 画个图,求三角形面积,可以用外接长方形 - 其他多余区域面积 ...
- 2018年蓝桥杯A组C/C++决赛题目
2018年蓝桥杯A组C/C++决赛题目 2018年蓝桥杯A组C/C++决赛题解 1:三角形面积 已知三角形三个顶点在直角坐标系下的坐标分别为: (2.3, 2.5) (6.4, 3.1) (5 ...
- 2016年蓝桥杯B组C/C++决赛题解
2016年第七届蓝桥杯B组C/C++决赛题解 2016年蓝桥杯B组C/C++决赛题目(不含答案) 1.一步之遥 枚举解方程,或者套模板解线性方程 #include<bits/stdc++.h&g ...
- 2016年蓝桥杯B组C/C++决赛题目
2016年第七届蓝桥杯B组C/C++决赛题目 点击查看2016年第七届蓝桥杯B组C/C++决赛题解 1.一步之遥 从昏迷中醒来,小明发现自己被关在X星球的废矿车里. 矿车停在平直的废弃的轨道上. 他的 ...
- 2015年蓝桥杯B组C/C++决赛题解
2015年第六届蓝桥杯B组C/C++决赛题解 点击查看2015年第六届蓝桥杯B组C/C++国赛题目(不含答案) 1.积分之迷 三重循环 枚举A,B,C的值,如果满足两个条件:3个A + 7个B ...
随机推荐
- Python 常见报错类型整理(一)
很多初学者会遇到很多奇奇怪怪的报错信息,在这里,我为大家已经准备好一部分报错信息的分析以及解决办法. 一.TypeError:类型错误,对象用来表示值的类型非预期类型时发生的错误 错误例子: age= ...
- 在java路径上找不到javax.servlet.http.HttpServlet
1.将写好的网页代码导入Java中会发现index.jsp文件开头部分出现报错 2.错误提示是找不到java路径问题 3.在项目中鼠标右键进行找到Build Path选项点击进去 4.找到Librar ...
- ceph常用操作
//修复一批数据不一致的pg ceph health detail|grep acting|awk -F' ' '{print $2}'|xargs -n1 ceph pg repair //修复os ...
- EXPORT_SYMBOL的正常使用
1.EXPORT_SYMBOL的作用是什么? EXPORT_SYMBOL标签内定义的函数或者符号对全部内核代码公开,不用修改内核代码就可以在您的内核模块中直接调用,即使用EXPORT_SYMBOL可以 ...
- [JavaScript]实例化对象
使用语法结构创建的对象 function Duck(name) { var obj = { name: name, say: function (content) { console.log(cont ...
- sqlserver ef 分页
sqlserver分页常用的有两种: 1.利用row_number set statistics time on; -- 分页查询(通用型) select top pageSize * from (s ...
- 查询openmp的版本
vim test.cpp #include <unordered_map>#include <cstdio>#include <omp.h> int main(in ...
- mfcc vs fbank
There is some debate in the community regarding the use of the DCT, instead of directly using the lo ...
- .net基础—多线程(一)
基本概念 进程 打开任务管理器,从任务管理器里面可以看到当前所有正在运行的进程.那么究竟什么是进程呢? 进程(Process)是操作系统中的一个基本概念,它包含着一个运行程序所需要的资源.一个正在运行 ...
- Color the ball HDU - 1556 _差分
N名同学拍成一排,编号为1,2,3,4 -- N.现在有一位老师需要检查所有同学的出勤情况,他会进行点名,每次给出两个数a,b,并且保证a小于等于b,这个区间内的所有同学都会被点名一次,老师会进行N次 ...