一个数除以6乘以2,经过多少次变成1

2022-07-31,,,

题意:有一个数能进行两种操作,除以6乘以2,问经过多少次操作能变成1.若不行则输出-1.

解题思路:我们可以统计2和3的因子,再进行判断即可。

AC代码:

/*
*邮箱:2825841950@qq.com
*blog:https://blog.csdn.net/hzf0701
*注:代码如有问题请私信我或在评论区留言,谢谢支持。
*/ #include<iostream> #include<cstdio> #include<cstdlib> #include<algorithm> #include<cmath> #include<string> #include<stack> #include<queue> #include<cstring> #include<map> #include<iterator> #include<list> #include<set> #include<functional> #include<memory.h>//低版本G++编译器不支持,若使用这种G++编译器此段应注释掉 #include<iomanip> #include<vector> #include<cstring> #define scd(n) scanf("%d",&n) #define scf(n) scanf("%f",&n) #define scc(n) scanf("%c",&n) #define scs(n) scanf("%s",n) #define prd(n) printf("%d",n) #define prf(n) printf("%f",n) #define prc(n) printf("%c",n) #define prs(n) printf("%s",n) #define rep(i,a,n) for (int i=a;i<=n;i++)//i为循环变量,a为初始值,n为界限值,递增 #define per(i,a,n) for (int i=a;i>=n;i--)//i为循环变量, a为初始值,n为界限值,递减。 #define pb push_back #define fi first #define se second #define mp make_pair using namespace std; typedef long long ll; typedef long double ld; typedef pair<ll, ll> pll; typedef pair<int, int> pii; const ll inf = 0x3f3f3f3f;//无穷大 const ll maxn = 1e5;//最大值。 //*******************************分割线,以上为代码自定义代码模板***************************************// int t; ll n; int cnt1,cnt2;//统计2的因子数和3的因子数。 int main(){ //freopen("in.txt", "r", stdin);//提交的时候要注释掉 ios::sync_with_stdio(false);//打消iostream中输入输出缓存,节省时间。 cin.tie(0); cout.tie(0);//可以通过tie(0)(0表示NULL)来解除cin与cout的绑定,进一步加快执行效率。 while(cin>>t){ while(t--){ cin>>n; cnt1=0;cnt2=0; while(n%3==0){ n/=3; cnt1++; } while(n%2==0){ n/=2; cnt2++; } if(n!=1){ //说明不仅仅只是包含2和3这些因子,那显然不能。 cout<<"-1"<<endl; } else{ if(cnt1<cnt2){ cout<<"-1"<<endl; } else{ cout<<cnt1+cnt1-cnt2<<endl; } } } } return 0; } 

本文地址:https://blog.csdn.net/hzf0701/article/details/107771227

《一个数除以6乘以2,经过多少次变成1.doc》

下载本文的Word格式文档,以方便收藏与打印。