为什么会运行错误?
  • 板块学术版
  • 楼主Davidben
  • 当前回复11
  • 已保存回复11
  • 发布时间2021/10/31 20:43
  • 上次更新2023/11/4 01:41:01
查看原帖
为什么会运行错误?
484468
Davidben楼主2021/10/31 20:43
农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上,农夫起始位于点N(0<=N<=100000),牛位于点K(0<=K<=100000)。农夫有两种移动方式:

1、从X移动到X-1或X+1,每次移动花费一分钟
2、从X移动到2*X,每次移动花费一分钟

假设牛没有意识到农夫的行动,站在原地不动。农夫最少要花多少时间才能抓住牛?

借鉴了下别人的思路写出的代码 代码:

#include<iostream>
using namespace std;
int n, k, shu[100001][20], t, a[10001] ;
int main() {
	cin >> n >> k;
	if (n == k) { 
		cout << 0 << endl;//自投罗网 
		return 0;
	}
	int l = 0, r = 1;
	shu[1][0] = n;
	shu[1][1] = 0;
	a[n] = 1;
	int x;
	while (l < r) {//给二分以搜索 而不是给搜索以二分 
		l++;
		x = shu[l][0];
		for (int i = 1; i <= 3; i++) { 
			if (i == 1) {
				t = x + 1;
			}
			if (i == 2) {
				t = x - 1;
			}
			if (i == 3) {
				t = x * 2;
			}
			if (t >= 0 && t <= 100001 && a[t] == 0) {//重点 
				r++;
				shu[r][0] = t;
				a[t] = 1;
				shu[r][1] = shu[l][1] + 1;
				if (t == k) {
					cout << shu[r][1];
					exit(0); 
				}
			}
		}
	}
	return 0;
}

2021/10/31 20:43
加载中...