码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-08-09 18:33:52      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:

当m是偶数时,除以2;

当m=3时,-1

当m!=3&&(m+1)%4==0时,+1

否则,-1

#include<iostream>
using namespace std;
int funx(int n)    
{
    int m=n;
    int count=0;

    while(m!=1)
        {
            if(m%2==0)
            {
                m=m/2;
            }
            else
                if(m==3)m=m-1;
                else 
                    if((m+1)%4==0)
                    {
                        m=m+1;
                    }
                    else
                    {    
                        m=m-1;
                    }
            count++;
        }

    return count;
}
int main()
{
    int n;
    while(cin>>n)
        cout<<funx(n)<<endl;
    system("pause");
    return 0;
}

 或者代码如下:参考博客

// 非递归写法
int func(int n)
{
    int count = 0;
    while(n > 1)
    {
        if(n % 2 == 0)            // n % 4等于0或2
            n >>= 1;
        else if(n == 3)
            n--;
        else
            n += (n % 4 - 2);     // n % 4等于1或3
        count++;
    }
    return count;
}

 

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

标签:

原文地址:http://www.cnblogs.com/xiangzhi/p/4715460.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!