欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > java >内容正文

java

第八届java c组,2015年Java方向C组第八题

发布时间:2025/3/21 java 38 豆豆
生活随笔 收集整理的这篇文章主要介绍了 第八届java c组,2015年Java方向C组第八题 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

标题:移动距离

X星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为1,2,3...

当排满一行时,从下一行相邻的楼往反方向排号。

比如:当小区排号宽度为6时,开始情形如下:

1 2 3 4 5 6

12 11 10 9 8 7

13 14 15 .....

我们的问题是:已知了两个楼号m和n,需要求出它们之间的最短移动距离(不能斜线方向移动)

输入为3个整数w m n,空格分开,都在1到10000范围内,要求输出一个整数,表示m n 两楼间最短移动距离。

例如:

用户输入:

6 8 2

则,程序应该输出:

4

再例如:

用户输入:

4 7 20

则,程序应该输出:

5

资源约定:

峰值内存消耗(含虚拟机) < 256M

CPU消耗 < 1000ms

请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。

注意:主类的名字必须是:Main,否则按无效代码处理。

解析:

根据题意,得出结论,最短距离=(两个数行号之差绝对值)+(两个数的列号之差绝对值)。

Scanner input = new Scanner(System.in);

int w = input.nextInt(); //矩阵一行的元素个数(宽度)

int m = input.nextInt(); //第一个数字

int n = input.nextInt(); //第二个数字

//根据题意,得出结论,最短距离=(两个数行号之差绝对值)+(两个数的列号之差绝对值)。

//此处行号从1开始

int mRow = m % w == 0 ? m / w : m / w+1; //第一个数的行号

int nRow = n % w == 0 ? n / w : n / w+1; //第二个数的行号

int mCol = 0; //第一个数字的列号,列号从0开始

if(mRow % 2 == 1) //奇数行(列号=m-当前行最小的数字)

mCol = m - (w*(mRow-1)+1);

else //偶数行(列号 = 当前行最大的数字-m)

mCol = w*mRow - m;

int nCol = 0; //第二个数字的列号,列号从0开始

if(nRow % 2 == 1) //奇数行(列号=m-当前行最小的数字)

nCol = n - (w*(nRow-1)+1);

else //偶数行(列号 = 当前行最大的数字-m)

nCol = w*nRow - n;

//由于我们要求的是行号之差和列号之差,所以行号和列号从0开始或从1开始并没有影响

int r = Math.abs(mRow-nRow) + Math.abs(mCol - nCol);

System.out.println(r);

总结

以上是生活随笔为你收集整理的第八届java c组,2015年Java方向C组第八题的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。