The 3n+1 problem

在网上看到的一个比较好的The 3n+1 problem,通过中间变量来保存结果集,较少了运算数量
1
#include <iostream> 2 3 #include <vector> 4 5 6 7 #define SIZE 100000 8 9 10 11 using namespace std; 12 13 14 15 int Count(vector<int> &viRec, int iNum) 16 17 { 18 19 int iTemp=iNum, iResult=0; 20 21 22 23 if (viRec[iTemp]!=0) return viRec[iTemp]; 24 25 while (iTemp!=1) 26 27 { 28 29 if (iTemp<=SIZE && viRec[iTemp]!=0) 30 31 { 32 33 viRec[iNum]=iResult+viRec[iTemp]; 34 35 return viRec[iNum]; 36 37 } 38 39 if ((iTemp&1)==0) iTemp=iTemp>>1; 40 41 else iTemp=iTemp*3+1; 42 43 iResult++; 44 45 } 46 47 viRec[iNum]=iResult; 48 49 return iResult; 50 51 } 52 53 54 55 int main() 56 57 { 58 59 vector<int> viRec(SIZE+1, 0); 60 61 int iBegin, iEnd; 62 63 64 65 while (cin>>iBegin>>iEnd) 66 67 { 68 69 int iMax=0; 70 71 72 73 if (iBegin>iEnd) swap(iBegin, iEnd); 74 75 for (int i=iBegin; i<=iEnd; i++) 76 77 { 78 79 int iTemp=Count(viRec, i); 80 81 82 83 if (iTemp>iMax) iMax=iTemp; 84 85 } 86 87 cout<<iMax<<endl; 88 89 } 90 91 return 0; 92 93 }
posted @ 2012-06-03 14:43  godjob  Views(215)  Comments(0Edit  收藏  举报