#include<iostream>
using namespace std;
int main()
{
int w,m,n;
cin>>w>>m>>n;
int mx=max(m,n);
int mi=min(m,n);
int x;
if(mx%w==0&&mx>=w)
{
x=mx/w;
}
else x=mx/w+1;
if(x%2==0&&x!=1){
if(mx%w!=0)mx=w-mx%w+1;
else mx=1;
}
else {
if(mx%w!=0)mx=mx%w;
else mx=w;
}
int y;
if(mi%w==0&&mi>=w)
{
y=mi/w;
}
else y=mi/w+1;
if(y%2==0&&y!=1){
if(mi%w!=0)mi=w-mi%w+1;
else mi=1;
}
else {
if(mi%w!=0)mi=mi%w;
else mi=w;
}
int ans=0;
ans=abs(mx-mi)+abs(x-y);
// cout<<x<<" "<<y<<endl;
// cout<<mx<<" "<<mi<<endl;
cout<<ans;
}
把需要求的都转化为在第一行。
要注意边界问题。
可以将每个数减一就不需要处理边界问题
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int w, m, n;
cin >> w >> m >> n;
m --, n -- ;
int x1 = m / w, x2 = n / w;
int y1 = m % w, y2 = n % w;
if (x1 % 2) y1 = w - 1 - y1;
if (x2 % 2) y2 = w - 1 - y2;
cout << abs(x1 - x2) + abs(y1 - y2) << endl;
return 0;
}

京公网安备 11010502036488号