程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> HDU 1030 數學題

HDU 1030 數學題

編輯:C++入門知識

HDU 1030 數學題


給出兩點,求這兩點在圖上的最短路徑


分別以最上,左下,右下為頂點,看這個三角圖形

ans=這三種情況下兩點的層數差

#include "stdio.h"
#include "string.h"
#include "math.h"
int main()
{
    int n,m,sn,sm,rn,rm,ln,lm,ans;
    while (scanf("%d%d",&n,&m)!=EOF)
    {
        sn=sqrt(n);
        if (sn*sn!=n) sn++; // 以最上為定點所在的層數
        sm=sqrt(m);
        if (sm*sm!=m) sm++;

        ln=(n-(sn-1)*(sn-1))/2+1+(sm-sn); // 以左下為頂點所在的層數
        lm=(m-(sm-1)*(sm-1))/2+1;

        rn=(sn*sn-n+1)/2+1+(sm-sn); // 以右下為頂點所在的層數
        rm=(sm*sm-m+1)/2+1;

        ans=fabs(sn-sm)+fabs(ln-lm)+fabs(rn-rm);

        printf("%d\n",ans);
    }
    return 0;
}


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved