| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 590 人关注过本帖
标题:古老的传说。。。。。。。。
只看楼主 加入收藏
mqh21364
Rank: 1
等 级:新手上路
帖 子:642
专家分:0
注 册:2008-2-28
收藏
 问题点数:0 回复次数:0 
古老的传说。。。。。。。。
/*
问题描述:
这是一个古老的猜想:给定任何一个正整数n,对它进行以下操作:
n是偶数:n=n/2
n是奇数:n=3*n+1
这样经过多步操作后,最后必定变为1
如对13进行操作: 13 -> 40 -> 20 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 -> 1
一共经历了9次操作,则称13这个数的周期是9

输入:
多组测试数据,每组一行,一行里有两个数m和n,
请你找出m和n之间(包括m,n)的周期最大的数的周期
其中m,n均为小于或者等于1e5的正整数

输出:
m,n之间周期最大的数的周期,一个结果单独占一行
*/
#include <stdio.h>
#define MAX 100000
int count1( long int a, long int *aa);

int main(void)
{
    long int a, b, m1, m2;
    static long int aa[MAX] = {0};
    scanf("%ld %ld", &a, &b);
    m1 = count1(a, aa);
    m2 = count1(b, aa);
    printf("%ld", (m1 > m2 ? m1 : m2));
}

int count1(long int a, long int *aa) {
    int i = 0;
    long int temp = a;
    while (temp != 1) {
        if (temp % 2 == 0) {           
                temp = temp / 2;
        }
        else {
            temp = 3 * temp + 1;
        }
        if (aa[temp] == 0) {
            i++;
        }
        else {
            i += aa[temp];
        }
    }
    aa[a] = i;
    return i;
}
搜索更多相关主题的帖子: 传说 
2008-04-17 13:56
快速回复:古老的传说。。。。。。。。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.011321 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved