i428: 1. 巴士站牌

2022.11.23 PM 08:00 by CBJ

來源 : https://zerojudge.tw/ShowProblem?problemid=i428
出題者 : 2022年10月APCS
標籤 : 算術運算(取絕對值)
難易度 : 1
解題想法 : 
依照題意實作,從index 1開始到n,每次跟"前一個人"計算曼哈頓距離並更新答案,最後輸出。

※注意 : 雖然x和y有保證不會大於100,但最大值和最小值千萬不能只開100,因為|x-y|是有可能大於100的。
//C language
//solution link(含註解): 

#include<stdio.h>
#include<stdlib.h> //abs()
#define max(a,b) ((a>b)?a:b)
#define min(a,b) ((a<b)?a:b)
int main()
{
    int n;
    scanf("%d",&n);
    int min_n=200,max_n=-200;
    int a[105][3];
    for(int i=0;i<n;i++){
        scanf("%d%d",&a[i][0],&a[i][1]);
    }
    for(int i=1;i<n;i++){
        int dis=abs(a[i][0]-a[i-1][0])+abs(a[i][1]-a[i-1][1]);
        min_n=min(min_n,dis);
        max_n=max(max_n,dis);
    }
    printf("%d %d\n",max_n,min_n);
    return 0;
}
//C++ language
//solution link(含註解): 

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main(){
    int n;
    cin>>n;
    int min_n=200,max_n=-200;
    vector<pair<int,int>>v;
    for(int i=0;i<n;i++){
        int x,y;
        cin>>x>>y;
        v.push_back({x,y});
    }
    for(int i=1;i<n;i++){
        int dis=abs(v[i].first-v[i-1].first) + abs(v[i].second-v[i-1].second);
        min_n=min(min_n,dis);
        max_n=max(max_n,dis);
    }
    cout<<max_n<<" "<<min_n<<"\n";
    return 0;
}
## Python language
## solution link(含註解): 

n=int(input())
a=[]
min_n=200
max_n=-200
for i in range(n):
    x,y=map(int,input().split())
    a.append([x,y])
for i in range(1,n):
    dis=abs(a[i][0]-a[i-1][0])+abs(a[i][1]-a[i-1][1])
    min_n=min(min_n,dis)
    max_n=max(max_n,dis)
print(max_n,min_n)

相關文章