y总代码:
#include<iostream>
using namespace std;
int main(){
int w,m,n;
cin>>w>>m>>n;
m--,n--;
int x1,x2,y1,y2;
x1=m/w;
y1=m%w;
x2=n/w;
y2=n%w;
if(x1&1){
y1=w-y1-1;
}
if(x2&1){
y2=w-y2-1;
}
cout<<abs(x1-x2)+abs(y1-y2)<<endl;
return 0;
}
我的代码:
#include<iostream>
using namespace std;
int main(){
int w,m,n;
cin>>w>>m>>n;
int l=max(m,n);
int r=min(m,n);
int a;
if(l%w==0)
a=l;
else
a=(l/w+1)*w;
int b;
if(r%w==0)
b=r;
else
b=(r/w+1)*w;
int temp=(a-b)/w-1;
int sum;
if(temp==-1)
sum=l-r;
else{
int p=l%w;
if(p==0)
p=w;
int q=r%w;
if(q==0)
q=w;
if(temp&1){
sum=abs(p-q)+temp+1;
//cout<<p<<' '<<q<<endl;
}
else
sum=min(abs(w-(p-1)-q),abs(w-(q-1)-p))+temp+1;
}
cout<<sum<<endl;
return 0;
}
我的问题:
在做本题目的时候,我想的是找出两个数字中间间隔的行数如果间隔奇数行,那么这两个数所在行元素的递增方向是相同的
如果是偶数那么两个数的递增方向是相反的,但是遇到的一个问题是如何确定中间的行数呢?想了好久,(笨!)
y总的方法是找出行,列坐标,这个方法我想过但是就是因为一行中最大的数%w=0这一个特殊的数我放弃,真的是太笨了
只要让每一个数都减一不就好了!!!