100 - The 3n + 1 problem

简单题,直接按照题目要求进行模拟就可以。注意可以保存中间结果,可以让运行时间提高一个数量级。

更快的方法应该是有的,只是对于本题给出的规模,这个算法已经可以很快的得到结果了。

 

返回 Volume I 索引

返回总索引

 

// 100_3n_plus_1.cpp : Defines the entry point for the console application. // #include <math.h> #ifndef ONLINE_JUDGE #include <fstream> std::ifstream cin("in.txt"); std::ofstream cout("out.txt"); #else #include <iostream> #endif using namespace std; #define MAX 1000000 int* seqLen; int getSeqLen(int x) { if(seqLen[x] > 0) { return seqLen[x]; } int nSeq = 1; int y = x; while(x != 1) { if(x <= MAX && seqLen[x] > 0) { nSeq += (seqLen[x] - 1); break; } if(x % 2 == 0) { x /= 2; } else { x = 3 * x + 1; } ++nSeq; } seqLen[y] = nSeq; return nSeq; } int getMax(int i, int j) { int base = i <= j ? i : j; int bound = i >= j ? i : j; int nMax = 0; int nLen = 0; for(int x = base; x <= bound; ++x) { nLen = getSeqLen(x); if(nLen > nMax) { nMax = nLen; } } return nMax; } int main() { seqLen = new int[MAX+1]; memset(seqLen, 0, sizeof(int) * (MAX + 1)); int i, j; while(cin>> i>> j) { cout<< i<< ' '<< j<< ' '<< getMax(i, j)<< '/n'; } }

 

100 - The 3n + 1 problem

你可能感兴趣的:(100 - The 3n + 1 problem)