#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;
}