• B. Multiply by 2, divide by 6


    题意:输入一个数n,判断是否能通过乘以2,除以6,把该数变成1。如果不能,输出-1;如果可以变成1,请输出从n变成1的次数。

    题解:可以乘以2,也可以除以6。除以6可以看作除以2和除以3,于是我们也可以通过乘以2,把除以6变成除以3。那么我们可以求该数是否能够通过除以2和除以3得到1,如果不能得到1或者需要的2,比需要的3的个数多时,也不行。(因为除以2,只能通过除以6得到,在除以2的同时,也会除以3。我们没有办法消除多余的3.)如果满足条件的话,我们可以通过求出来的2的个数和3的个数得到答案。

    ACcode:

    int main()

    {

    int t;

    int n;

    cin >> t;

    while (t--)

    {

    int sum3 = 0, sum2 = 0;

    cin >> n;

    int x;

    x = n;

    //分解出2,3;

    while (x % 2 == 0)

    {

    x = x / 2;

    sum2++;

    }

    while (x % 3 == 0)

    {

    x = x / 3;

    sum3++;

    }

    if (x > 1 || sum2> sum3)

    {

    cout << -1 << endl;

    }

    else

    cout << (sum3 - sum2 )+ sum3 << endl;//括号里的数表达的是3和2个数之差,就是需要乘以2多少次,得到单独的除以3,3的个数就是除以2和除以3同时进行的次数。

    }

    return 0;

    }

  • 相关阅读:
    学习总结javascript和ajax,php,和css
    css基础二
    JQUERY基础
    JS基础与DOM操作(一)
    div布局
    样式表
    框架及其他小技巧
    表格与表单
    HTML基础
    二阶段测试
  • 原文地址:https://www.cnblogs.com/Uiney117/p/14459559.html
Copyright © 2020-2023  润新知