zzuli1427 NO.6校赛----数字转换
Posted zzq
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了zzuli1427 NO.6校赛----数字转换相关的知识,希望对你有一定的参考价值。
1427: 数字转换
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 572 Solved: 153
SubmitStatusWeb Board
Description
老师交给小明一个任务,有两个数字x和y(x<y),通过以下两种操作:一、将x乘以2;二、将x的值加上1。小明希望能通过尽可能少的操作来完成这个任务,但是不知道怎么做,现在请大家来帮帮他的忙吧。
Input
两个整数x,y(0<=x<y<=10^6)。
Output
一个整数n,表示最少经过多少次操作,x可以变成y。
Sample Input
2 5
10 80
Sample Output
2
3
最怕的就是数学题哎;
采用逆推法,由大数向小数递推,不难发现除2操作带来的‘收益’远远大于减一操作无论数为多大时候,最小也就是2/2=1,2-1=1,此时二者效果相等,其他时候除2会减少的更加明显;
因此得出结论,能除2尽量多除二,除不尽时再减一;
#include<iostream>
#include<cstring>
using namespace std;
int solve(int x,int y)
{
int i,j,sumn=0;
while(x<y){
if(y%2==0){
if(y/2>=x) y/=2;
else sumn+=y-x-1,y=x;
}
else y--;
++sumn;
if(x==y) break;
}
return sumn;
}
int main()
{
int x,y;
while(cin>>x>>y) cout<<solve(x,y)<<endl;
return 0;
}
以上是关于zzuli1427 NO.6校赛----数字转换的主要内容,如果未能解决你的问题,请参考以下文章