欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

模拟找规律 2015蓝桥杯 C/C++ B组 移动距离

程序员文章站 2022-03-13 16:36:17
...

注意事项

在oj中多组数据读入,每行输出一组结果,一定要换行!!!使结果排版与之相同


题面

模拟找规律 2015蓝桥杯 C/C++ B组 移动距离

思路
  1. 分单双行找“序号z”与坐标x,y的关系
  2. 行号都不变(不受影响)
if(z%w==0) x = z/w;
else x = z/w+1;
  1. 单行列号不受影响
if(x%2 == 1) {
	if(z%w == 0) y = w;
	else y = z%w;
}
  1. 双行列号反向
if(x%2 == 0) {
	if(z%w == 0) y = 1;
	else y = (w+1)-(z%w);
}
  1. 最近移动距离即横纵坐标之差的和
(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;
}
相关标签: PTA、蓝桥杯