牛客——牛妹与牛牛的游戏
一天,牛妹找牛牛做一个游戏,牛妹给牛牛写了一个数字n,然后又给自己写了一个数字m,她希望牛牛能执行最少的操作将他的数字转化成自己的。
操作共有三种,如下:
1.在当前数字的基础上加一,如:4转化为5
2.在当前数字的基础上减一,如:4转化为3
3.将当前数字变成它的平方,如:4转化为16
解题思路
- 通过sqrt函数并四舍五入找出与之最近的数num
- 判断是否存在多次平方
- 最近的数num与m比较
- 汇总所需步骤step
- 判断哪种情况步骤较少并返回
代码
#include<stdio.h>
#include<math.h>
int solve(int,double);
int main()
{
int n;
double m;
int number;
scanf("%d,%lf",&n,&m);
printf("step:%d",solve(n,m));
}
int solve(int n,double m)
{
int num;
int length;
int step=0;
if(n==m)
return 0;
if(n>m)
return n-(int)m;
num=(int)(sqrt(m)+0.5);
loop:
if(n*n<=num&&n!=1)
{
step++;
n*=n;
goto loop;
}
if((length=m-num*num)<0)
length=-length;
step+=abs(n-num)+(length+1);
if(m-n<step)
return m-n;
return step;
}