- 论坛徽章:
- 3
|
- int get2(int n)
- {
- int ret=0;
- int t;
- while(n!=1) {
- if(n&1) {
- if((n&3)!=3 || (n&15)==3) {
- n--;
- } else {
- n++;
- }
- } else {
- n/=2;
- }
- ret++;
- }
- return ret;
- }
复制代码
尚未证明,但是测100w以下没有任何问题
因为构造了一个递归算法(这个应该没问题):
- int get(int n,int s)
- {
- int step=0;
- int b=n;
- if(b==1)
- return s;
- if(b%2)
- {
- step=get(b+1,s+1);
- int st=get(b-1,s+1);
- if(step>st) {
- step=st;
- //printf("**n+1=%d\n",b+1);
- } else {
- //printf("**n-1=%d\n",b-1);
- }
- }
- else
- {
- b=b/2;
- step=get(b,s+1);
- //printf("**n/2=%d\n",b);
- }
- return step;
- }
复制代码
[ 本帖最后由 cjaizss 于 2008-9-2 16:35 编辑 ] |
|