又来刷水题了,题目传送门。
 思路
看这个递推函数 f(x),它像什么?
角谷猜想是说给定一个正整数 xi,进行如下操作:
{xi+1=xi÷2xi is evenxi+1=3xi+1xi is odd
再回到题目,像不像角谷猜想?事实上,这个函数 f(x) 是角谷猜想所需要的步数。
所以我们就可以得到以下的式子:
f(x)−1={f(x/2)x is evenf(3x+1)x is odd
那么我们可以反向递推呢?当然可以。
我们已经知道了 f(1789997546303)=1000,我们可以运用它类似角谷猜想的性质反向递推。
 AC 代码
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 
 | #include<bits/stdc++.h>#define int long long
 using namespace std;
 
 signed main(){
 int p,arr[1005]={0};
 arr[1000]=1789997546303;
 cin >> p;
 for(int i=999;i>=p;i--){
 if(arr[i+1]%2==1)	arr[i]=arr[i+1]*3+1;
 else	arr[i]=arr[i+1]/2;
 }
 cout << arr[p] << endl;
 return 0;
 }
 
 | 
AC 记录