From 9d9904f3dc113e170b9a8d9c3d0c9edba7dd68ab Mon Sep 17 00:00:00 2001 From: YdrMaster Date: Mon, 8 Jul 2024 12:54:49 +0800 Subject: [PATCH] =?UTF-8?q?update:=20=E6=B7=BB=E5=8A=A0=E9=A2=98=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: YdrMaster --- exercises/04_static/main.cpp | 2 -- exercises/05_constexpr/main.cpp | 2 -- exercises/06_loop/main.cpp | 15 +++++++++++++++ exercises/07_struct/main.cpp | 25 +++++++++++++++++++++++++ exercises/08_class/main.cpp | 26 ++++++++++++++++++++++++++ xmake.lua | 12 ++++++++++++ 6 files changed, 78 insertions(+), 4 deletions(-) create mode 100644 exercises/06_loop/main.cpp create mode 100644 exercises/07_struct/main.cpp create mode 100644 exercises/08_class/main.cpp diff --git a/exercises/04_static/main.cpp b/exercises/04_static/main.cpp index 460a9a10d..c5a13051b 100644 --- a/exercises/04_static/main.cpp +++ b/exercises/04_static/main.cpp @@ -1,5 +1,3 @@ -// See . - #include void func(int param) { diff --git a/exercises/05_constexpr/main.cpp b/exercises/05_constexpr/main.cpp index ade4e5425..c7814686d 100644 --- a/exercises/05_constexpr/main.cpp +++ b/exercises/05_constexpr/main.cpp @@ -1,5 +1,3 @@ -// See . - #include constexpr int fibonacci(int i) { diff --git a/exercises/06_loop/main.cpp b/exercises/06_loop/main.cpp new file mode 100644 index 000000000..05bca573b --- /dev/null +++ b/exercises/06_loop/main.cpp @@ -0,0 +1,15 @@ +#include + +unsigned long long fibonacci(int i) { + static unsigned long long cache[128]{0, 1}, next = 2; + for (; next <= i; ++next) { + cache[next] = cache[next - 1] + cache[next - 2]; + } + return cache[i]; +} + +int main(int argc, char **argv) { + auto fib100 = fibonacci(100); + std::cout << "fibonacci(100) = " << fib100 << std::endl; + return 0; +} diff --git a/exercises/07_struct/main.cpp b/exercises/07_struct/main.cpp new file mode 100644 index 000000000..3fb4ff62d --- /dev/null +++ b/exercises/07_struct/main.cpp @@ -0,0 +1,25 @@ +#include + +struct Fibonacci { + size_t cache[128]; + int next = 2; + + Fibonacci() : cache{0, 1}, next(2) {} + ~Fibonacci() { + std::cout << "Drop Fibonacci with next = " << next << std::endl; + } + + size_t operator[](int i) { + for (; next <= i; ++next) { + cache[next] = cache[next - 1] + cache[next - 2]; + } + return cache[i]; + } +}; + +int main(int argc, char **argv) { + Fibonacci fib0, fib1; + std::cout << "fibonacci(10) = " << fib0[10] << std::endl; + std::cout << "fibonacci(100) = " << fib1[100] << std::endl; + return 0; +} diff --git a/exercises/08_class/main.cpp b/exercises/08_class/main.cpp new file mode 100644 index 000000000..1be69eb70 --- /dev/null +++ b/exercises/08_class/main.cpp @@ -0,0 +1,26 @@ +#include + +class Fibonacci { + size_t cache[128]; + int next = 2; + +public: + Fibonacci() : cache{0, 1}, next(2) {} + ~Fibonacci() { + std::cout << "Drop Fibonacci with next = " << next << std::endl; + } + + size_t operator[](int i) { + for (; next <= i; ++next) { + cache[next] = cache[next - 1] + cache[next - 2]; + } + return cache[i]; + } +}; + +int main(int argc, char **argv) { + Fibonacci fib0, fib1; + std::cout << "fibonacci(10) = " << fib0[10] << std::endl; + std::cout << "fibonacci(100) = " << fib1[100] << std::endl; + return 0; +} diff --git a/xmake.lua b/xmake.lua index 6d04ef8c8..3ff40e4e1 100644 --- a/xmake.lua +++ b/xmake.lua @@ -24,3 +24,15 @@ target("exercise04") target("exercise05") set_kind("binary") add_files("exercises/05_constexpr/main.cpp") + +target("exercise06") + set_kind("binary") + add_files("exercises/06_loop/main.cpp") + +target("exercise07") + set_kind("binary") + add_files("exercises/07_struct/main.cpp") + +target("exercise08") + set_kind("binary") + add_files("exercises/08_class/main.cpp")