概述
题目大意
就是给你一个n和一个k
你可以做两种操作:一是减一 二是除以k
让输出最小操作步骤
解题思路
一开始觉得签到题 就直接遍历取模减一的 然后第二个样例就超时了。
偷看了大佬的代码
基本思路是:先判断是否可以除尽k 如果可以 步骤加一 n=n/k;
如果不可以 说明肯定要进行减一的步骤 然后想啊 n%k的值不就是剩下的要减一的那些个数吗 所以步骤数加上 n%k
然后n变成 n-n%k;因为这是进行的减一的步骤
详细见代码
代码如下
#include<iostream>
using namespace std;
typedef long long ll;
int main()
{
ll n,k,ans;
int t;
cin>>t;
while(t--)
{
ans=0;
cin>>n>>k;
while(n!=0)
{
if(n%k==0)
{
ans++;
n/=k;
}
else
{
ans+=(n%k);
n-=(n%k);
}
}
cout<<ans<<endl;
}
return 0;
}
类似题
http://codeforces.com/problemset/problem/1176/A
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long n,ans=0,t;
cin>>t;
while(t--)
{
ans=0;
cin>>n;
while(n%2==0)
{
ans++;
n/=2;
}
while(n%3==0)
{
ans+=2;
n/=3;
}
while(n%5==0)
{
ans+=3;
n/=5;
}
if(n==1)
cout<<ans<<endl;
else
cout<<"-1"<<endl;
}
return 0;
}
最后
以上就是标致紫菜为你收集整理的cf签到题的全部内容,希望文章能够帮你解决cf签到题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复