模拟找规律 2015蓝桥杯 C/C++ B组 移动距离
程序员文章站
2022-03-13 16:36:17
...
注意事项
在oj中多组数据读入,每行输出一组结果,一定要换行!!!使结果排版与之相同
题面
思路
- 分单双行找“序号z”与坐标x,y的关系
- 行号都不变(不受影响)
if(z%w==0) x = z/w;
else x = z/w+1;
- 单行列号不受影响
if(x%2 == 1) {
if(z%w == 0) y = w;
else y = z%w;
}
- 双行列号反向
if(x%2 == 0) {
if(z%w == 0) y = 1;
else y = (w+1)-(z%w);
}
- 最近移动距离即横纵坐标之差的和
(x2-x1)+(y2-y1)
代码
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int w,n,m;
while(cin >> w >> m >> n) {
int x1 = 0,y1 = 0,x2 = 0,y2 = 0;
if(m%w==0) x1 = m/w;
else x1 = m/w + 1;
if(x1%2==1) {
if(m%w == 0) y1 = w;
else y1 = m%w;
}else {
if(m%w == 0) y1 = 1;
else y1 = (w+1) - (m%w);
}
if(n%w==0) x2 = n/w;
else x2 = n/w+1;
if(x2%2==0) {
if(n%w==0) y2 = 1;
else y2 = (w+1) - (n%w);
}else {
if(n%w == 0) y2 = w;
else y2 = n%w;
}
// cout <<x1<<" "<<y1<<" "<<x2<<" "<<y2 <<endl;
//cout << abs(x2-x1)+abs(y2-y1);测评不通过
cout << abs(x2-x1)+abs(y2-y1)<<endl;
}
return 0;
}
上一篇: 我真的没有不轨之心啊