• zzuli1427 NO.6校赛----数字转换


    1427: 数字转换

    Time Limit: 1 Sec  Memory Limit: 128 MB
    Submit: 572  Solved: 153

    SubmitStatusWeb Board

    Description

    老师交给小明一个任务,有两个数字xyx<y),通过以下两种操作:一、将x乘以2;二、将x的值加上1。小明希望能通过尽可能少的操作来完成这个任务,但是不知道怎么做,现在请大家来帮帮他的忙吧。

    Input

    两个整数xy0<=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;
    }

  • 相关阅读:
    在线重定义 half
    系统测试概述 half
    Linux常用性能检测命令 half
    关于robotium half
    hudson集成 half
    铺满浏览器窗口的界面设计
    Intellij IDEA配置优化转载
    window下安装zookeeper
    kbengine集群控制工具
    使用installer安装kbengine
  • 原文地址:https://www.cnblogs.com/zzqc/p/6650408.html
Copyright © 2020-2023  润新知