每日一题(小白)模拟娱乐篇33
首先,理解题意是十分重要的,我们是要求最短路径,这道题可以用dfs,但是题目给出的数据是有规律的,我们可以尝试模拟的过程使用简单的方法做出来。每隔w数字就会向下转向,就比如题目上示例的w=6,无论从任何一个点出发,到6的倍数就会向下走,走6步继续向下走,我们可以使用两个变量记录,向下走的步数就是两个房子在列上的距离,行之间的距离需要进行处理,因为每两行是不同的,一行正增长,一行负增长,如果向下转向的次数是2的倍数说明又回到了相同的递增/递减规律行上,只需要取x1-x2的绝对值,x1即原坐标所在的行,x2即终点坐标所在的行;如果是转向奇数次,则说明一行正增长,一行负增长,取余之后的值一个是从左数到右,一个是从右数到左,我们直接给第一个数字加上6得到了下一个数字的位置,就变成了偶数行,再取相减的绝对值即可!
①接收数据
②模拟过程,存储转向数据
③判断转向次数,若为偶数直接取行位置相减的绝对值即可
④若不为偶数,给第一个数字+w再取相减的绝对值
⑤输出结果
代码如下👇
public static void main(String[] args) {Scanner scan = new Scanner(System.in);int w=scan.nextInt();int start=scan.nextInt();int end=scan.nextInt();int count=0;int x1=start%w;//距离行起点相对位置int x2=end%w;//距离行起点相对位置for (int i = start; i <= end; i++) {if (i%w==0) {//转向count++;}}//System.out.println(count);测试点if (count%2==0) {//两行同方向System.out.println(count+Math.abs(x1-x2));}else {//两个方向不同int x3=Math.abs(end-((count+1)*w-start+1));//System.out.println(x3);System.out.println(count+x3);}scan.close();}