#include <bits/stdc++.h> using namespace std; long long arr[6608375]; long long f(long long n) { if(n==4){ return arr[4]; } if(arr[n]==0){ arr[n] = (n&1?f(3*n+1) : f(n/2)); return arr[n]+1; } else{ return arr[n]+1; } } int main() { long long a; arr[4]=0; while(scanf("%lld",&a)!=EOF) { printf("%lld\n",f(a)); } return 0; }
因為沒有測資範圍,所以我把表(arr)開到盡量最大。
並使用遞迴(f())來建表(arr),但
而當我把表作小一點時
#include <bits/stdc++.h> using namespace std; long long arr[1000000]; long long f(long long n) { if(n==4){ return arr[4]; } if(arr[n]==0){ arr[n] = (n&1?f(3*n+1) : f(n/2)); return arr[n]+1; } else{ return arr[n]+1; } } int main() { long long a; arr[4]=0; while(scanf("%lld",&a)!=EOF) { printf("%lld\n",f(a)); } return 0; }
出現了另一種錯誤:
希望有人能告訴我出錯的地方以及資料範圍
註:以上程式碼在測試執行都沒問題
這題記憶體只給16MB
你用的 #include <bits/stdc++.h> 會爆炸
請改成 #include <stdio.h>
I/O用這個標頭檔內的 scanf()、printf()
以上OuOb