zoukankan      html  css  js  c++  java
  • C: 简单的数字变换(1312)

    题目链接:http://acm.xidian.edu.cn/problem.php?id=1312

      可以用队列模拟,但D题再说吧,这个只有两种操作,-1和*2;

      若n > m,一直做-1;

      若n = 0,而m != 0,则不可能达到

      若n < m,可以从m出发,尽可能做 / 2,若不行,则做 + 1;(这个贪心多想想吧)

     1 #include<stdio.h>
     2 
     3 int main()
     4 {
     5     int n, m;
     6     while(scanf("%d %d",&n,&m) != EOF)
     7     {
     8         int cnt = 0;
     9         if(n == 0 && m != 0)
    10         {
    11             printf("-1
    ");
    12             continue;
    13         }
    14         if(n == m)
    15         {
    16             printf("0
    ");
    17             continue;
    18         }
    19         while(1)                                //处理到m < n时,则剩下的步骤为n--; 
    20         {
    21             cnt++;
    22             if(m > n && (m % 2 == 0))
    23                 m /= 2;
    24             else if(m > n && (m % 2 != 0))
    25                 m++;
    26             else
    27                 break;        
    28         }
    29         cnt += (n - m) - 1;
    30         printf("%d
    ",cnt);
    31     }
    32     return 0;
    33 }
  • 相关阅读:
    CF1270H
    CF1305G
    LeetCode-Sqrt(x)
    LeetCode-Plus One
    LeetCode-Integer to Roman
    LeetCode-Roman to Integer
    LeetCode-String to Integer (atoi)
    LeetCode-Reverse Integer
    C++
    LeetCode-Gray Code
  • 原文地址:https://www.cnblogs.com/Dicer/p/9100881.html
Copyright © 2011-2022 走看看