520B. Two Buttons

链接:

https://codeforces.com/problemset/problem/520/B

题意

有一个装置,上面有一个红按钮,一个蓝按钮和一个数字n。
如果按红色,数字会*2;
如果按蓝色,数字会-1;
现在再输入一个m,问从n到m最少按多少次按钮?
1 ≤ n, m ≤ 104

Example

input
4 6
output
2
input
10 1
output
9

解析

这题可以用逆向思维,题目求的是n到m最少需要多少步,每次就是要么乘2,要么减1;那么如果反过来,从m推回n,每次就是要么除2,要么加1。
然后如果n > m,那m就只能按蓝色按钮了,结果就是n-m
如果n <= m,那m每次判断是不是奇数,如果是奇数,就加1,偶数就除2,然后这中间记次数就行。

#include <iostream>

using namespace std;

int main()
{
	int n, m;
	cin >> n >> m;

	int cnt = 0;
	int t = m;

	for (; n < t;)
	{
		if (t & 1)
		{
			t++;
			cnt++;
		}

		t /= 2;
		cnt++;
	}

	cnt += n - t;

	cout << cnt;

	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值