46 lines
819 B
C
46 lines
819 B
C
#include "trap.h"
|
|
|
|
int f0(int, int);
|
|
int f1(int, int);
|
|
int f2(int, int);
|
|
int f3(int, int);
|
|
|
|
int (*func[])(int, int) = {
|
|
f0, f1, f2, f3,
|
|
};
|
|
|
|
int rec = 0, lvl = 0;
|
|
|
|
int f0(int n, int l) {
|
|
if (l > lvl) lvl = l;
|
|
rec ++;
|
|
return n <= 0 ? 1 : func[3](n / 3, l + 1);
|
|
};
|
|
|
|
int f1(int n, int l) {
|
|
if (l > lvl) lvl = l;
|
|
rec ++;
|
|
return n <= 0 ? 1 : func[0](n - 1, l + 1);
|
|
};
|
|
|
|
int f2(int n, int l) {
|
|
if (l > lvl) lvl = l;
|
|
rec ++;
|
|
return n <= 0 ? 1 : func[1](n, l + 1) + 9;
|
|
};
|
|
|
|
int f3(int n, int l) {
|
|
if (l > lvl) lvl = l;
|
|
rec ++;
|
|
return n <= 0 ? 1 : func[2](n / 2, l + 1) * 3 + func[2](n / 2, l + 1) * 2;
|
|
};
|
|
|
|
int ans[] = {38270, 218, 20};
|
|
|
|
int main() {
|
|
int x = func[0](14371, 0);
|
|
check(x == ans[0]); // answer
|
|
check(rec == ans[1]); // # recursions
|
|
check(lvl == ans[2]); // max depth
|
|
return 0;
|
|
}
|