小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;
}
 
題目做完啦!!!!

---恢復內容結束---


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM