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组的更多相关文章

  1. 2018年第九届蓝桥杯B组题C++汇总解析-fishers

    2018年第九届蓝桥杯B组题C++解析-fishers 题型 第一题:第几天 第二题:明码 第三题:乘积尾零 第四题:测试次数 第五题:快速排序 第六题:递增三元组 第七题:螺旋折线 第八题:日志统计 ...

  2. 黄金连分数|2013年蓝桥杯B组题解析第四题-fishers

    黄金连分数 黄金分割数0.61803... 是个无理数,这个常数十分重要,在许多工程问题中会出现.有时需要把这个数字求得很精确. 对于某些精密工程,常数的精度很重要.也许你听说过哈勃太空望远镜,它首次 ...

  3. 啤酒和饮料|2014年蓝桥杯B组题解析第一题-fishers

    啤酒和饮料|2014年第五届蓝桥杯B组题解析第一题-fishers 啤酒和饮料 啤酒每罐2.3元,饮料每罐1.9元.小明买了若干啤酒和饮料,一共花了82.3元. 我们还知道他买的啤酒比饮料的数量少,请 ...

  4. 2016年蓝桥杯B组C/C++省赛(预选赛)题目解析

    2016年蓝桥杯B组C/C++ 点击查看2016年蓝桥杯B组省赛试题(无答案版) 第一题:煤球数目 题解 有一堆煤球,堆成三角棱锥形.具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个( ...

  5. 2016年蓝桥杯B组C/C++省赛(预选赛)试题

    2016年蓝桥杯B组C/C++ 点击查看2016年蓝桥杯B组省赛题目解析(答案) 第一题:煤球数目 有一堆煤球,堆成三角棱锥形.具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成 ...

  6. 2018年蓝桥杯A组C/C++决赛题解

    2018年第九届蓝桥杯A组C/C++决赛题解 点击查看视频题解 点击查看2018年蓝桥杯A组C/C++决赛题目(不含答案) 1:三角形面积 画个图,求三角形面积,可以用外接长方形 - 其他多余区域面积 ...

  7. 2018年蓝桥杯A组C/C++决赛题目

    2018年蓝桥杯A组C/C++决赛题目 2018年蓝桥杯A组C/C++决赛题解     1:三角形面积 已知三角形三个顶点在直角坐标系下的坐标分别为: (2.3, 2.5) (6.4, 3.1) (5 ...

  8. 2016年蓝桥杯B组C/C++决赛题解

    2016年第七届蓝桥杯B组C/C++决赛题解 2016年蓝桥杯B组C/C++决赛题目(不含答案) 1.一步之遥 枚举解方程,或者套模板解线性方程 #include<bits/stdc++.h&g ...

  9. 2016年蓝桥杯B组C/C++决赛题目

    2016年第七届蓝桥杯B组C/C++决赛题目 点击查看2016年第七届蓝桥杯B组C/C++决赛题解 1.一步之遥 从昏迷中醒来,小明发现自己被关在X星球的废矿车里. 矿车停在平直的废弃的轨道上. 他的 ...

  10. 2015年蓝桥杯B组C/C++决赛题解

    2015年第六届蓝桥杯B组C/C++决赛题解 点击查看2015年第六届蓝桥杯B组C/C++国赛题目(不含答案)     1.积分之迷 三重循环 枚举A,B,C的值,如果满足两个条件:3个A + 7个B ...

随机推荐

  1. Python 常见报错类型整理(一)

    很多初学者会遇到很多奇奇怪怪的报错信息,在这里,我为大家已经准备好一部分报错信息的分析以及解决办法. 一.TypeError:类型错误,对象用来表示值的类型非预期类型时发生的错误 错误例子: age= ...

  2. 在java路径上找不到javax.servlet.http.HttpServlet

    1.将写好的网页代码导入Java中会发现index.jsp文件开头部分出现报错 2.错误提示是找不到java路径问题 3.在项目中鼠标右键进行找到Build Path选项点击进去 4.找到Librar ...

  3. ceph常用操作

    //修复一批数据不一致的pg ceph health detail|grep acting|awk -F' ' '{print $2}'|xargs -n1 ceph pg repair //修复os ...

  4. EXPORT_SYMBOL的正常使用

    1.EXPORT_SYMBOL的作用是什么? EXPORT_SYMBOL标签内定义的函数或者符号对全部内核代码公开,不用修改内核代码就可以在您的内核模块中直接调用,即使用EXPORT_SYMBOL可以 ...

  5. [JavaScript]实例化对象

    使用语法结构创建的对象 function Duck(name) { var obj = { name: name, say: function (content) { console.log(cont ...

  6. sqlserver ef 分页

    sqlserver分页常用的有两种: 1.利用row_number set statistics time on; -- 分页查询(通用型) select top pageSize * from (s ...

  7. 查询openmp的版本

    vim test.cpp #include <unordered_map>#include <cstdio>#include <omp.h> int main(in ...

  8. mfcc vs fbank

    There is some debate in the community regarding the use of the DCT, instead of directly using the lo ...

  9. .net基础—多线程(一)

    基本概念 进程 打开任务管理器,从任务管理器里面可以看到当前所有正在运行的进程.那么究竟什么是进程呢? 进程(Process)是操作系统中的一个基本概念,它包含着一个运行程序所需要的资源.一个正在运行 ...

  10. Color the ball HDU - 1556 _差分

    N名同学拍成一排,编号为1,2,3,4 -- N.现在有一位老师需要检查所有同学的出勤情况,他会进行点名,每次给出两个数a,b,并且保证a小于等于b,这个区间内的所有同学都会被点名一次,老师会进行N次 ...