移动距离
题目 移动距离
思路分析
模拟案例可以发现规律
#include<bits/stdc++.h>
using namespace std;
int main(){
int w,m,n;
cin>>w>>m>>n;
int zong1=m/w;
// cout<<"zong1: "<<zong1<<endl;
int heng1;
if(zong1&1)
heng1=(w-(m%w)+1)%2;
else
heng1=m%w;
// cout<<"heng1: "<<heng1<<endl;
int zong2=n/w;
// cout<<"zong2: "<<zong2<<endl;
int heng2;
if(zong2&1)
heng2=(w-(n%w)+1)%2;
else
heng2=n%w;
// cout<<"heng2: "<<heng2<<endl;
cout<<abs(heng2-heng1)+abs(zong2-zong1);
return 0;
}
这样无法兼顾两边的情况 一直加补丁 一直出现新问题
列从0开始计数 偶数情况会出现-1变负 列从1开始计数 奇数情况会出现超过大小 得再取个模
究其原因是因为 数据是从1开始的 要把它变成从0开始 问题就解决了
移动距离
代码实现
#include<bits/stdc++.h>
using namespace std;
int main(){
int w,m,n;
cin>>w>>m>>n;
m--,n--;
int col1=m/w;
int row1=m%w;
if(col1&1)
row1=w-1-row1;
int col2=n/w;
int row2=n%w;
if(col2&1)
row2=w-1-row2;
cout<<abs(row2-row1)+abs(col2-col1);
return 0;
}
同类题型
视频讲解
⬅️ 暴力 枚举 模拟 问题 🏠 00-刷题理模型 ➡️ 蹄子剪刀布
💬 评论