思路:题目要求输出要复制多少遍达到n 那么全部复制粘贴是不是最快的 所以一直除2就可以了 注意特殊情况
代码:
#include<cstdio>
#include<iostream>
using namespace std;
int k,cnt=0;;
int solve(int n)
{
int ans = 0;
int tmp = 0;
if(n==1) return 0;
if(n==2) return 1;
while(n)
{
if(n%2==0)
{
n /= 2;
ans++;
}
else
{
n-= 1;
tmp++;
n /= 2;
ans++;
}
}
if(tmp==1) return --ans; //若用ans++会返回没有减1的值,此处处理2的N次方
return ans;
}
int main()
{
while((scanf("%d",&k)==1)&&k>0)
{
cnt++;
cout<<"Case "<<cnt<<": "<<solve(k)<<endl;
}
return 0;
}
快速复制粘贴算法

本文介绍了一种通过不断除以2来实现快速复制粘贴的算法,并提供了完整的C++实现代码。该算法适用于需要计算最少操作次数以通过复制和粘贴达到特定目标数量的场景。
376

被折叠的 条评论
为什么被折叠?



