Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1758930
  • 博文数量: 290
  • 博客积分: 10653
  • 博客等级: 上将
  • 技术积分: 3178
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-24 23:08
文章存档

2013年(6)

2012年(15)

2011年(25)

2010年(86)

2009年(52)

2008年(66)

2007年(40)

分类: C/C++

2010-11-17 18:53:02

买了编程挑战一书 。有时间的话写着玩儿 。。
相关连接:

1.6.1 : 3n +1 问题
PC/UVa 题号 : 110101/100

#include <iostream>
using namespace std;

int get_n(int & n);

int get_count(int n);

const int MIN = 0;
const int MAX = 1000000;

int main(int argc ,char *argv[])
{
    int i,
        j;
    register int count = 1,
        temp = 0;
    cout<<"please input "<<endl;
    cin>>i>>j;
    if((i <= MIN) || ( i >MAX))
        cout<<"integer i must ( 0 < i < 1000000)!"<<endl;
    if((j <= MIN) || ( j >MAX))
        cout<<"integer j must ( 0 < j < 1000000)!"<<endl;
   
    if(i >j){

        temp = j;
        j = i;
        i = temp;
    }
    int loop = i;
    while(loop < j)
    {
         int n = loop;
         int result = get_count(n);
         if(result > count)
         {
            temp = count;
            count = result;
            result = temp;
         }
         loop++;
    }
    cout<<i<<'\t'<<j<<'\t'<<count<<endl;
    return 0;
}

/** /fun int get_count(int n,int count);
 * /brief 给定一个n,返回该数的循环节长度
 * /param int n
 * /return count
 */

int get_count(int n)
{
    int count = 1;
    cout<<n<<',';
    do{
        count++ ;
        get_n(n);
        if(n < 0)
        {
            break;
        }
        cout<<n<<',';
    }while(n!=1);
    
    cout<<endl;
    return count;
}

/** /fun get_n(int &n)
 * /brief 判度一个数是奇还是偶,如果是偶数则除2,
 * 如果是奇数,则*3 +1
 * /param int &n 输入的正整数
 * /return 计算结果
 */

int get_n(int & n)
{
    if(n%2 == 0)
    {
        n >>= 1;
    
    }else if(n%2 == 1){
    
        n = n*3+1;
    }else
    {
        n = -1;
    }

    return n;
}


阅读(1340) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~