蓝桥杯刷题——day9

server/2024/12/25 2:11:28/

蓝桥杯刷题——day9

  • 题目一
    • 题干
    • 解题思路一
    • 代码
    • 解题思路二
    • 代码
  • 题目二
    • 题干
    • 解题思路
    • 代码

题目一

题干

小蓝最近在研究一种浮点数的表示方法:R格式。对于一个大于0的浮点数d,可以用R格式的整数来表示。给定一个转换参数n,将浮点数转换为R格式整数的做法是:

  1. 将浮点数乘以2n
  2. 四舍五入到最接近的整数。

输入: 一行一个整数n和一个浮点数d。
输出: 一行一个整数表示d用R格式表示出的值。

示例一:

输入:
2 3.14
输出:
13

题目链接: R格式

解题思路一

乍一看感觉这道题目不是很简单,不就是数的运算嘛,输入两个数n和d,然后输出2n×d的四舍五入结果。我们来看完整代码:

代码

import java.util.Scanner;
public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);long num1 = scanner.nextInt();double num2 = scanner.nextDouble();double num = Math.pow(2,num1) * num2;long rounded = Math.round(num);System.out.println(rounded);}
}

很简单对不对,但是我们发现用这个去提交代码并不能完全通过,问题出在哪里呢?当 num1很大时,Math.pow(2, num1) 会导致浮点数溢出或精度丢失,可能无法准确表示结果。那么自然num就会跟我们想要的不一样了,那么我们应该如何解决呢?

解题思路二

我们直接看代码:

代码

import java.util.Scanner;
public class Main {static int n, p, l;static int[] a = new int[114514];  // 数组大小适当设置static String q;// 乘法操作static void mul() {for (int i = 1; i <= l; i++) {a[i] *= 2;  // 按位乘以2}// 进位处理for (int i = 1; i <= l; i++) {a[i + 1] += a[i] / 10;  // 进位到下一位a[i] %= 10;  // 保留当前位的个位数}// 如果最高位有进位,需要增加长度if (a[l + 1] != 0) {l++;}}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);// 输入整数n和小数qn = scanner.nextInt();q = scanner.next();// 反转小数q,方便后续处理StringBuilder sb = new StringBuilder(q);q = sb.reverse().toString();// 查找小数点位置p = q.indexOf('.');q = q.replace(".", "");  // 删除小数点// 设置小数的总长度l = q.length();// 将字符串转为整数数组for (int i = 0; i < l; i++) {a[i + 1] = q.charAt(i) - '0';  // 将字符转换为数字}// n次乘以2for (int i = 0; i < n; i++) {mul();}// 小数部分四舍五入if (a[p] >= 5) {a[p + 1]++;}// 进位检查for (int i = p + 1; i <= l; i++) {a[i + 1] += a[i] / 10;  // 进位到下一位a[i] %= 10;  // 保留当前位的个位数}// 再次检查最高位if (a[l + 1] != 0) {l++;}// 输出结果(逆序输出)for (int i = l; i > p; i--) {System.out.print(a[i]);}}
}

首先,我们进行变量的定义,n:表示要进行的乘法次数。p:表示小数点的位置。l:表示小数部分的长度。a:一个数组,用来存储小数部分的每一位数字。a[i]表示从小数点开始的第i位数字(数组从1开始存储)。然后定义一个函数mul(),这个函数用于将存储在数组a中的数字乘以2,并处理进位。主函数中中我们接受包括整数n(表示乘法次数)和字符串q(表示小数),为了方便处理,反转字符串q。通过q.indexOf(‘.’)找到小数点的位置,并将小数点删除。通过for循环,调用mul()方法n次,即实现将小数部分乘以2的操作。每次调用mul()都会修改数组a中的数字。在完成n次操作后,判断小数点前面一个数子的大小(我们在删除小数点时记录了位置),如果大于5就进一,小于5就舍去小数点后面的数字,最后,程序输出乘法后的结果(反转后的结果),问题解决。

题目二

题干

今年是2021年,2021这个数字非常特殊, 它的千位和十位相等, 个位比百位大11,我们称满足这样条件的年份为特殊年份。输入5个年份,请计算这里面有多少个特殊年份。
输入: 输入5行,每行一个4位十进制数(数值范围为1000 至9999),表示一个年份。
输出: 输出一个整数,表示输入的5个年份中有多少个特殊年份。
示例一:

输入:
2019
2021
1920
2120
9899
输出:
2

题目地址: 特殊年份

解题思路

这条题目非常的简单,取出4位的每一位数字,然后判断十位和千位是否相同,并且个位是否比百位大一,如果同时满足,计数器就加1,下面是完整代码:

代码

import java.util.Scanner;
public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int[] arr = new int[5];for (int i = 0; i < 5; i++) {arr[i] = scanner.nextInt();}int num = 0;for (int i = 0; i < 5; i++) {int one = arr[i] % 10;int two = (arr[i] / 10) % 10;int three = (arr[i] / 100) % 10;int four = (arr[i] / 1000) % 10;if (two == four && one-three ==1){num++;}}System.out.println(num);}
}

如果有任何的问题,欢迎评论和私信,也感谢各位的点赞和收藏!


http://www.ppmy.cn/server/152935.html

相关文章

golang 并发--goroutine(四)

golang 语言最大的特点之一就是语法上支持并发&#xff0c;通过简单的语法很容易就能创建一个 go 程&#xff0c;这就使得 golang 天生适合写高并发的程序。这一章节我们就主要介绍 go 程&#xff0c;但是要想完全理解 go 程我们需要深入研究 GPM 模型&#xff0c;关于 GPM 模型…

WebXR

HTTPS https网页才能启动VR模式&#xff0c;本地调试时配置https vite 启用 https npm install -D vitejs/plugin-basic-ssl --save vite.config.js import { defineConfig } from vite; import basicSsl from vitejs/plugin-basic-ssl;export default defineConfig({serv…

使用 HTML5 Canvas 实现动态蜈蚣动画

使用 HTML5 Canvas 实现动态蜈蚣动画 1. 项目概述 我们将通过 HTML 和 JavaScript 创建一个动态蜈蚣。蜈蚣由多个节段组成&#xff0c;每个节段看起来像一个小圆形&#xff0c;并且每个节段上都附带有“脚”。蜈蚣的头部会在画布上随机移动。 完整代码在底部&#xff01;&…

编译笔记:vs 中 正在从以下位置***加载符号 C# 中捕获C/C++抛出的异常

加载符号 解决方法&#xff1a; 进入VS—工具—选项----调试----符号&#xff0c;看右边有个“Microsoft符号服务器”&#xff0c;将前面的勾去掉&#xff0c;&#xff08;可能还有删除下面的那个缓存&#xff09;。 参考 C# 中捕获C/C抛出的异常 在需要捕捉破坏性异常的函数…

JS中的innerHTML,innerText,value的区别

目录 Document 对象 主要用途 getElementById() 方法 innerHTML innerText value Document 对象 Document 对象&#xff0c;当 HTML 文档加载到 Web 浏览器中时&#xff0c;它就变成了一个文档对象。文档对象是 HTML 文档的根节点。文档对象是窗口对象的属性。 在JavaSc…

前端开发 详解 Node. js 都有哪些全局对象?

在 Node.js 中&#xff0c;全局对象&#xff08;Global Objects&#xff09;是指在任何模块中都可以直接访问的对象和变量&#xff0c;而不需要显式地进行导入。Node.js 提供了一些全局对象&#xff0c;帮助开发者在编写应用程序时更加方便地进行一些常见操作&#xff0c;如文件…

WebContainerapi 基础(Web IDE 技术探索 一)

前言 随着web技术的发展&#xff0c;在网页端直接运行node.js、实现微型操作系统已经不再是难事。今天介绍的 WebContainers就是一个基于浏览器的运行时&#xff0c;用于执行 Node.js 应用程序和操作系统命令&#xff0c;它完全运行在您的浏览器页面中&#xff0c;提供了文件系…

创新驱动医疗变革:SSM+Vue 医院预约挂号系统的设计与实践

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理医院预约挂号系统的相关信息成为必然。开发…