蓝桥杯刷题——day9

news/2024/12/25 13:43:59/

蓝桥杯刷题——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/news/1558007.html

相关文章

【HTML】动态闪烁圣诞树+雪花+音效

效果展示 使用方法&#xff1a; 1、桌面新建文本文档.txt 2、下述代码复制至文本文档中 3、修改t后缀txt修改为html 4、双击点开 完整代码自取 <!DOCTYPE html> <html lang"en" ><head><meta charset"UTF-8"><title>M…

Flutter 基础知识总结

1、Flutter 介绍与环境安装 为什么选择 Dart&#xff1a; 基于 JIT 快速开发周期&#xff1a;Flutter 在开发阶段采用 JIT 模式&#xff0c;避免每次改动都进行编译&#xff0c;极大的节省了开发时间基于 AOT 发布包&#xff1a;Flutter 在发布时可以通过 AOT 生成高效的 ARM…

链路聚合与GVRP的混合构建(eNSP)

目录 拓扑图&#xff1a; 前置操作&#xff1a; GVRP全局开启&#xff1a; 查询&#xff1a; 实验背景&#xff1a;前面依次搭建了交换机的链路聚合实验手册以及动态vlan GVRP&#xff0c;为了模拟真实环境&#xff0c;本次实验将两者结合。 拓扑图&#xff1a; 前置操作&…

Springboot基于Web的辅助教学平台ln5i2(程序+源码+数据库+调试部署+开发环境)

本系统****&#xff08;程序源码数据库调试部署开发环境&#xff09;带论文文档1万字以上&#xff0c;文末可获取&#xff0c;系统界面在最后面。**** 系统程序文件列表 学生,教师,课程类型,课程信息,选课信息,作业信息,作业提交,作业批改,课程考勤,成绩信息 开题报告内容 …

《开启微服务之旅:Spring Boot 从入门到实践》(三)

自动配置原理 配置文件到底能写什么&#xff1f;怎么写&#xff1f;自动配置原理&#xff1b; https://docs.spring.io/spring-boot/docs/1.5.9.RELEASE/reference/htmlsingle/#common-application-properties 自动配置原理 SpringBoot启动的时候加载主配置类&#xff0c;开启…

MFC/C++学习系列之简单记录10——定时器

MFC/C学习系列之简单记录10——定时器 前言Time定时器具体使用步骤.h文件.cpp文件错误和解决 总结 前言 今天学习一下MFC的定时器的使用&#xff01; Time定时器 定时器的作用是允许开发者在应用程序中创建定时器&#xff0c;以便在指定的时间间隔后执行特定的任务。 定时器…

“自动驾驶第一股” 图森未来退市转型:改名 CreateAI、发布图生视频大模型 “Ruyi”

12 月 19 日&#xff0c;自动驾驶公司图森未来&#xff08;TuSimple&#xff09;宣布启用全新品牌 CreateAI&#xff0c;并发布多项在生成式 AI 领域的进展。 CreateAI 宣布获著名武侠 IP《金庸群侠传》正版授权&#xff0c;将开发一款大型武侠开放世界 RPG 游戏。 新的 Creat…

CSS|13 position属性

position位置 position表示位置&#xff0c;主要用于实现对元素的定位。 在CSS中定位分为三种&#xff1a; position:fixed; 固定定位position:relative; 相对定位position:absolute; 绝对定位 注意&#xff1a; 在使用定位属性时&#xff0c;一定要配合定位的坐标来使用&am…