最少步数
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
给定一个数字n,我们可以进行3种操作,加1,减1,如果可以整除2,还可以除2,问最少多少步变换到1.
输入
输入数据的第一行包含数字n(1<=n<=10000000)。多组输入。
输出
计算结果。
示例输入
3
示例输出
2
提示
来源
cz
示例程序
#include<stdio.h>
int d[10000001];
int set(int n)
{
if(n==1)
{
d[n]=0;
return d[n];
}
if(n==2)
{
d[n]=1;
return d[n];
}
else
{
if(n%2==0)
d[n]=set(n/2)+1;
else
d[n]=set(n-1)>set(n+1)?set(n+1)+1:set(n-1)+1;
return d[n];
}
}
int main()
{
int i,j,n,m,k,t;
while(scanf("%d",&n)!=EOF)
{
k=set(n);
printf("%d\n",k);
}
}