zoukankan      html  css  js  c++  java
  • 小X与机器人

    ---恢复内容开始---

    首先,我们来看一下题目:

    时间限制 : 1 Sec
    内存限制 : 128 Mb
    提交 : 141
    解决 : 64

    题目描述

    小X的老师很喜欢围棋。众所周知,围棋的棋盘有19行19列,共有361个交叉点。为方便起见,我们把这些行列按顺序编号为1~19,并用(x, y)表示第x列第y行的位置。例如下图中,A用(16,4)表示,B用(14, 3)表示。

    小X在做一个机器人的项目,他正思考这样一个问题:如果一个小机器人从(x1, y1)这个位置出发,沿直线移动到(x2, y2)这个位置,它一共经过了多少个交叉点?

    注意起点和终点也算作经过,因此至少经过了2个交叉点。

     

    输入

    输入数据仅有一行包含4个用空格隔开的正整数,分别表示x1, y1, x2, y2

     

    输出

    输出一行包含一个小于20的正整数,表示从(x1, y1)沿直线移动到(x2, y2)经过的交叉点的个数。

     

    样例输入

    样例1: 
    4 4 4 16
    样例2: 
    1 1 19 19
    样例3: 
    1 1 7 5

    样例输出

    样例1: 
    13
    样例2: 
    19
    样例3: 
    3
     
    偶们的思路:
    1、将所有两点移至左下角,消除一个坐标。
    2、剩下的坐标行(以下称H)列(以下称L)if (H==0)输出L+1;if (L==0) 输出H+1。
    3、接下来的,通过观察,点数为剩下的HL坐标的最大公约数+1。
    4、可以做了。
     
    标程:
    #include<bits/stdc++.h>
    using namespace std;
    int x1,yy1,x2,y2,s,ans=1,i=2;
    int main()
    {
     cin>>x1>>yy1>>x2>>y2;
        if (x1>x2)x1=x1-x2;
        else x1=x2-x1;
        if (yy1>y2)yy1=yy1-y2;
        else yy1=y2-yy1;
        if (x1==0)cout<<yy1+1<<endl;
        else if (yy1==0)cout<<x1+1<<endl;
             else
            {
             
             while(i<=x1)
             {
              if(x1%i==0)
              {
               if (yy1%i==0)
         {
          ans*=i;
          yy1=yy1/i;
         }
               x1=x1/i;
              }
              else
               ++i;
             }
             cout<<ans+1<<endl;
            }
     return 0;
    }
     
    题目做完啦!!!!

    ---恢复内容结束---

  • 相关阅读:
    Python PEP8 编码规范中文版
    MySQL分区表
    mybatis缓存,包含一级缓存与二级缓存,包括ehcache二级缓存
    斐讯K2刷不死breed与第三方固件教程
    Mysql 多表连接查询 inner join 和 outer join 的使用
    mysql多表关联删除示例
    sublime Text 几款插件
    多进程vs多线程
    git 命令常用总结
    LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
  • 原文地址:https://www.cnblogs.com/leonqqs/p/7065064.html
Copyright © 2011-2022 走看看