找规律

来源:互联网 发布:水果游戏机编程 编辑:程序博客网 时间:2024/04/19 10:09

题目描述:

实现一个函数,对一个正整数n,算得到1需要的最少操作次数。操作规则为:如果n为偶数,将其除以2;如果n为奇数,可以加1或减1;一直处理下去。

例如 5->4->2->1,5需要三步;7->8->4->2->1 最快需要四步,或者7->6->3->2->1这种走法。

当n是偶数时,将n除以2,如果n是奇数时,需要考虑最后两位是01或者11,当是01时,需要减去1,当是11时需要加上1,构成2的幂次方.

3是特殊情况,需要特殊处理

int minstep(int n){    if((n%2) == 0)    return 1+minstep(n/2);    if(n == 1)    return 0;    if(n == 3)    return 2;    if((n & 3) == 3){  // 判断最后两位是11       return 1+minstep(n+1);    }    if((n & 1) == 1){ // 判断最后两位是01       return 1+minstep(n-1);    }}

或者这样写:

int minstep(int n){    if((n%2) == 0)    return 1+minstep(n/2);    if(n == 1)    return 0;    if(n == 3)    return 2;    if((n & 2)){       return 1+minstep(n+1);// 当最后两位是11时,和10的与存在    }    else{       return 1+minstep(n-1);// 当最后两位是01时候    }}


0 0
原创粉丝点击