JAVA 蓝桥杯模拟 梅花桩
问题描述
小明每天都要练功,练功中的重要一项是梅花桩。
小明练功的梅花桩排列成 n 行 m 列,相邻两行的距离为 1,相邻两列的距离也为 1。
小明站在第 1 行第 1 列上,他要走到第 n 行第 m 列上。小明已经练了一段时间,他现在可以一步移动不超过 d 的距离(直线距离)。
小明想知道,在不掉下梅花桩的情况下,自己最少要多少步可以移动到目标。
输入格式
输入的第一行包含两个整数 n, m,分别表示梅花桩的行数和列数。
第二行包含一个实数 d(最多包含一位小数),表示小明一步可以移动的距离。
输出格式
输出一个整数,表示小明最少多少步可以到达目标。
样例输入
3 4
1.5
样例输出
3
10评测用例规模与约定
对于 30% 的评测用例,2 <= n, m <= 20,1 <= d <= 20。
对于 60% 的评测用例,2 <= n, m <= 100,1 <= d <= 100。
对于所有评测用例,2 <= n, m <= 1000,1 <= d <= 100。
思路
1.首先我们要确定 小明在不掉下去的情况下是可以斜向和横向纵向移动的 也就是这三种走法:
2.但是由于小明的行走距离的问题,实际中可能会出现无法通过单一方向移动来到达目的地的情况,在这种情况下要得到最小的移动步数,小明要先尽量走斜向来靠近目标点,当斜向走到行数或者列数和目标点的行数或列数一致时,则通过横向或纵向移动。也就是这两种情况:
3.我们需要通过判断来选择小明的最佳路线,才能得到最小步数
解题步骤
1.先获取目标点的行数n、列数m、小明一步的长度d。
2.声明四个变量:
dd=小明一步能移动的行数或列数
b=小明到达目的地需要的最小步数
z=小明斜向能移动的行数和列数
x=斜向一列和一行之间的距离 例:[1,1]到[2,2]的距离
3.因为行列之间的距离为1,根据勾股定理得斜向移动一行一列的距离为2的平方根 即x=Math.sqrt(2)
4.通过声明一个从1开始的循环计算小明斜向能移动的行数和列数x,当d>x时说明小明一步可以移动的距离大于斜向一个行列的距离,此时将斜向距离增加一格,继续进行判断,确认小明是否能斜向移动两格,以此类推,最终确定小明斜向可以移动的距离。
5.写一个有两个参数的循环来模拟小明行走的路线,i代表当前行,j代表当前列,当行列与目标的行列相同时说明到达了目标点,循环结束。
一共有以下几种情况:
n=i: 行数相同,只需要计算小明走完列需要的步数b+=((m-j)/dd)+((m-j)%dd);
m==j:列数相同,只需要计算小明走完列需要的步数b+=((n-i)/dd)+((n-i)%dd);
n-i>=z&&m-j>=z:行与列的距离都大于斜向可以走的距离说明小明此时应该斜向走i+=z;j+=z;b++;
n-i<z&&m-j>=z:剩余的行数小于斜向可以走的距离而列数大于斜向可以走的距离,此时小明可以将剩余的行数直接走完,也就是斜向移动n-i的距离,之后行数就和目标行数相等了,此时回到第一种情况,计算出步数。
n-i>=z&&m-j<z:剩余的列数小于斜向可以走的距离而行数大于斜向可以走的距离与上面一种情况基本一致,最终会变成列数与目标相等的情况。
6.经过判断计算出结果,输出b 步数。
public static void main(String[] args) {Scanner sc=new Scanner(System.in);int n=sc.nextInt();int m=sc.nextInt();double d=sc.nextDouble();int dd=(int)d;int b=0;int z=0;double x=Math.sqrt(2);for (int i = 1; i <=1000; i++) {if(d>x){x+=x; }else{z=i-1;break;}}for (int i=1,j = 1; i<=n&j<=m;) {if(n==i&&m==j)break;if(n==i){b+=((m-j)/dd)+((m-j)%dd);break;}if(m==j){b+=((n-i)/dd)+((n-i)%dd);break;}if(n-i>=z&&m-j>=z){i+=z;j+=z;b++;}else if(n-i<z&&m-j>=z){i+=(n-i);j+=(n-i);b++;}else if(n-i>=z&&m-j<z){i+=(m-j);j+=(m-j);b++;}}System.out.println(b);}
JAVA 蓝桥杯模拟 梅花桩相关推荐
- JAVA 蓝桥杯模拟 元音字母辅音字母的数量
问题描述 给定一个单词,请计算这个单词中有多少个元音字母,多少个辅音字母. 元音字母包括 a, e, i, o, u,共五个,其他均为辅音字母. 输入格式 输入一行,包含一个单词,单词中只包含小写英文 ...
- 第十三届蓝桥杯模拟赛第二期JAVA组个人题解
第十三届蓝桥杯模拟赛第二期JAVA组个人题解 文章目录 第十三届蓝桥杯模拟赛第二期JAVA组个人题解 题目1 题目2 题目3 题目4 题目5 题目6 题目7 题目8 题目9 题目10 题目1 小蓝的I ...
- 第十四届蓝桥杯模拟赛(第三期)Java组个人题解
第十四届蓝桥杯模拟赛(第三期)Java组个人题解
- 2022 第十四届蓝桥杯模拟赛第一期(题解与标程)
第十四届蓝桥杯模拟赛第一期 1. 二进制位数 问题描述 答案提交 参考答案 2. 晨跑 问题描述 答案提交 参考答案 3. 调和级数 问题描述 答案提交 参考答案 程序验证 4. 山谷 问题描述 答案 ...
- Java 蓝桥杯 我们的征途是星辰大海
Java 蓝桥杯 我们的征途是星辰大海 最新的火星探测机器人curiosity被困在了一个二维迷宫里,迷宫由一个个方格组成. 共有四种方格: '.' 代表空地,curiosity可以穿过它 '#' 代 ...
- 【蓝桥杯Web】大一小白参与蓝桥杯模拟赛二期web组体会
目录 前言 一.相关比赛介绍 1.ACM国际大学生程序设计竞赛 2.蓝桥杯 3.GPLT团队程序设计天梯赛 4.leetcode周赛和双周赛 5.PAT 二.蓝桥杯 1.应该参加蓝桥杯吗? 2.如何进 ...
- 2020年蓝桥杯模拟赛2020.3.25直播笔记
2020年蓝桥杯模拟赛解题报告(CPP版本) 第八题 长草的bfs写法[我想暴力模拟O kmn] 深搜会爆 bfs像投到水里的涟漪 问题: const int dx[] = {1, 0, -1, 0} ...
- 标题 日期问题java蓝桥杯,日期类的使用(java)-蓝桥杯
蓝桥杯日期问题常考,java提供了日期类很方便: //日历类 Calendar c = Calendar.getInstance(); // 获取实例化对象 Date date =c.getTime( ...
- java蓝桥杯练习 学做菜
java蓝桥杯练习 学做菜 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 涛涛立志要做新好青年,他最近在学做菜.由于技术还很生疏,他只会用鸡蛋,西红柿,鸡丁,辣酱这四种原料来做菜, ...
最新文章
- Dynamics CRM 导入用户数据错误 could not retrieve salesperson role
- 十三、深入Python字典和集合
- 中台之上(十五):被忽视的产品目录
- 微前端之single-spa
- python组成结构_Python数据分析丨pandas基本数据结构组成
- 一款漂亮的赞助打赏单页界面美化版源码
- mariadb 创建用户及授权
- 《Go语言程序设计》读书笔记(六) 基于共享变量的并发
- 百度DuerOS联手蓝港发布“小青智趣”,布局AI语音问答游戏
- python调整屏幕缩放比例_python实现按长宽比缩放图片 python的turtle怎样缩放界面吧...
- smart原则_项目目标管理的 SMART 原则
- idea社区版本下载
- 人工智能之父图灵头像将登上新版50英镑钞票
- iis中应用程序服务器错误,iis应用程序服务器错误
- 禅宗公案 艾舍尔的画与哥德尔定理——哥德尔逻辑与哲学之2
- psd 将分组合并导出png图片
- 错误提示 - Procmon.exe - 无法找到入口(InitializeSRWLock)
- 为什么深度学习都在用python,你知道吗
- 微信图像接口 html,图像接口
- 电钻、电锤、电镐的区别
热门文章
- 短视频不知道怎么定位?教你三个自我商业定位的方法,收藏学习
- opencv debug realease 模式转换 注意事项
- HNUSTOJ-1698 送外卖(TSP问题 + 状态压缩DP)
- 遍历map的键值对的方法(深入浅出)
- Java虚拟机(JVM) - 字节码
- 转帖:中国程序员的真实写照!悲哀····
- 暗光环境下的公开数据集-ExDark数据集,转YOLO格式
- 「日本直聘」软件工程师
- 两个周末整理的垃圾回收知识,我要吐血了
- IC设计基础002:RAM的读延时与读数据锁存