zoukankan      html  css  js  c++  java
  • [蓝桥杯2015初赛]移动距离【数学【曼哈顿距离】】

    思路:利用其是每一排的数字,找出其中的规律。
    一定不要着急,不然就找不出来啦。

    1261: [蓝桥杯2015初赛]移动距离
    时间限制: 1 Sec 内存限制: 256 MB
    提交: 387 解决: 181
    [状态] [提交] [命题人:外部导入]
    题目描述
    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范围内
    w为排号宽度,m,n为待计算的楼号。
    输出
    要求输出一个整数,表示m n 两楼间最短移动距离。
    样例输入 Copy
    6 8 2
    4 7 20
    样例输出 Copy
    4
    5

    #include <iostream>
    using namespace std;
    
    int jude(int x, int m, int w)
    {
    	int y1;
    	if (x % 2 == 0)
    	{
    		if (m/w%2 == 1 && m % w == 0)
    			y1 = w - 1;
    		else if(m/w%2 == 0 && m % w == 0)
    			y1 = 0;
    		else
    			y1 = m % w - 1;
    	}
    	else
    	{
    		if (m/w%2 == 1 && m % w == 0)
    			y1 = w - 1;
    		else if(m/w%2 == 0 && m % w == 0)
    			y1 = 0;
    		else
    			y1 = w - m % w;
    	}
    	return y1;
    }
    
    int main()
    {
    	int n,m,w;
    	while (cin >> w >> m >> n)
    	{
    		int x1, x2, y1, y2;
    		x1 = m/w;
    		x2 = n/w;
    		if (m%w == 0) x1 = (m - 1)/w;
    		if (n%w == 0) x2 = (n - 1)/w;
    		y1 = jude(x1,m,w);
    		y2 = jude(x2,n,w);
    		int ans = abs(x1-x2) + abs(y1-y2);
    		cout << ans << endl; 
    	}
    	return 0;
    }
    
    追求吾之所爱
  • 相关阅读:
    python网络爬虫(1)静态网页抓取
    博弈论的一些例子
    虚机Linux最小系统下安装图形界面,与yum配置
    主成分分析法详解(PCA)
    吴恩达机器学习私人总结(3)神经网络
    HttpServletRequest & HttpServletResponse
    编译原理复习
    Http协议 & Servlet
    分享一下HttpWatch 10 pro 带lic激活文件
    基于Storm的WordCount
  • 原文地址:https://www.cnblogs.com/rstz/p/12393215.html
Copyright © 2011-2022 走看看