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;

}

posted @ 2021-02-28 16:26  Uiney  阅读(84)  评论(0编辑  收藏  举报