2019.6. 寻找方案
描述
Alice 在玩一个很好玩的数字游戏。这个游戏是这样的,首先有一个给定的 正整数 x,现在你可以进行下面这三种操作:
给 x 加一 给 x 减一 若 x 为 3 的倍数,则可以给 x 除以 3
现在 Alice 想让你帮帮她,找到一个操作次数最少的方案,把一个数 x 通 过这些操作变成 1。比如当 x=10 时,一种可行的方案是
x−1 , x=9,
x = x/3, x =3 ,
x=x/3, x=1
输入
第一行输入一个整数x
输出
输出一行一个整数代表 Alice 最少需要操作的次数
输入样例 1
15
输出样例 1
4
输入样例 2
100
输出样例 2
7
提示
题目包含 10 个测试点
对于第 1,2,3 测试点,满足 1≤x≤100。
对于第 4,5,6 测试点,满足 1≤x ≤10 ^7
对于第 7,8 测试点,满足 1≤x≤10^18。
对于所有测试点,满足 1≤x≤10^25
#include<iostream>
using namespace std;
int main()
{
long long x;
cin>>x;
long long cnt=0;
while(x!=1)
{
if(x%3==0)
{
x=x/3;
cnt++;
}
else if(x%3==1)
{
x=x-1;
cnt++;
}
else if(x%3==2&&x!=2)
{
x=x+1;
cnt++;
}
else if(x==2)
{
x=x-1;
cnt++;
}
}
cout<<cnt;
}