HDU1032 The 3n + 1 problem

来源:互联网 发布:catiav5r20 软件下载 编辑:程序博客网 时间:2024/05/16 11:43

原题传送

这道题其中一个做法是给一个范围,在这个范围内每个数都判断一次;我的做法是吧1-1000000所有数先求出来,再判断,这样的做法在范围较小时会比第一种做法慢很多,但却可以在1s内输出1-1000000的结果。

#include <stdio.h>int A[1000010];int main(void) {    int m, n, max, count, t;    long long i, k;    A[1] = 1;    for(i = 2;i < 1000001;i++) {        k = i;        count = 0;        while(k >= i && ++count)   // k < i 时结果已经在前面算了,所以没必要再算            k = (k % 2) ? (k * 3 + 1) : (k / 2);        A[i] = count + A[k];   //跳出循环后把A[k]也加上    }    while(~scanf("%d%d", &m, &n)) {        printf("%d %d ", m, n);        max = 1;        if(m > n) {   // 注意m, n的大小            t = m;            m = n;            n = t;        }        for(i = m;i <= n;i++)            max = A[i] > max ? A[i] : max;   //比较        printf("%d\n", max);    }    return 0;}




0 0
原创粉丝点击