summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--PlaygroundCpp/.cproject38
-rw-r--r--PlaygroundCpp/Sources/Playground.cpp99
2 files changed, 89 insertions, 48 deletions
diff --git a/PlaygroundCpp/.cproject b/PlaygroundCpp/.cproject
index ea3a3d9..6299ddd 100644
--- a/PlaygroundCpp/.cproject
+++ b/PlaygroundCpp/.cproject
@@ -65,6 +65,20 @@
<tool id="cdt.managedbuild.tool.gnu.cpp.linker.exe.debug.1593738472" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.exe.debug">
+ <option id="gnu.cpp.link.option.paths.1593365739" superClass="gnu.cpp.link.option.paths" valueType="libPaths">
+
+ <listOptionValue builtIn="false" value="/home/haidong/googletest/build/googlemock/gtest"/>
+
+ </option>
+
+ <option id="gnu.cpp.link.option.libs.2046973616" superClass="gnu.cpp.link.option.libs" valueType="libs">
+
+ <listOptionValue builtIn="false" srcPrefixMapping="" srcRootPath="" value="gtest"/>
+
+ <listOptionValue builtIn="false" srcPrefixMapping="" srcRootPath="" value="gtest_main"/>
+
+ </option>
+
<inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.1967757968" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
@@ -77,6 +91,12 @@
<tool id="cdt.managedbuild.tool.gnu.assembler.exe.debug.183585801" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.exe.debug">
+ <option id="gnu.both.asm.option.include.paths.1592126793" superClass="gnu.both.asm.option.include.paths" valueType="includePath">
+
+ <listOptionValue builtIn="false" value="/home/haidong/googletest/googletest/include"/>
+
+ </option>
+
<inputType id="cdt.managedbuild.tool.gnu.assembler.input.641163583" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
</tool>
@@ -239,8 +259,24 @@
<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
- <storageModule moduleId="refreshScope"/>
+ <storageModule moduleId="refreshScope" versionNumber="2">
+
+ <configuration configurationName="Debug">
+
+ <resource resourceType="PROJECT" workspacePath="/PlaygroundCpp"/>
+
+ </configuration>
+
+ <configuration configurationName="Release">
+
+ <resource resourceType="PROJECT" workspacePath="/PlaygroundCpp"/>
+
+ </configuration>
+
+ </storageModule>
<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>
+
+ <storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
</cproject>
diff --git a/PlaygroundCpp/Sources/Playground.cpp b/PlaygroundCpp/Sources/Playground.cpp
index 47575e1..8ef7faa 100644
--- a/PlaygroundCpp/Sources/Playground.cpp
+++ b/PlaygroundCpp/Sources/Playground.cpp
@@ -1,54 +1,59 @@
#include <iostream>
-#include <cassert>
+//#include <gtest/gtest.h>
-// The following code calls a naive algorithm for computing a Fibonacci number.
+//int get_fibonacci_last_digit_naive(int n) {
+// if (n <= 1)
+// return n;
//
-// What to do:
-// 1. Compile the following code and run it on an input "40" to check that it is slow.
-// You may also want to submit it to the grader to ensure that it gets the "time limit exceeded" message.
-// 2. Implement the fibonacci_fast procedure.
-// 3. Remove the line that prints the result of the naive algorithm, comment the lines reading the input,
-// uncomment the line with a call to test_solution, compile the program, and run it.
-// This will ensure that your efficient algorithm returns the same as the naive one for small values of n.
-// 4. If test_solution() reveals a bug in your implementation, debug it, fix it, and repeat step 3.
-// 5. Remove the call to test_solution, uncomment the line with a call to fibonacci_fast (and the lines reading the input),
-// and submit it to the grader.
-
-int fibonacci_naive(int n) {
- if (n <= 1)
- return n;
-
- return fibonacci_naive(n - 1) + fibonacci_naive(n - 2);
-}
-
-int64_t fibonacci_fast(int n) {
- // write your code here
- if (n <= 1)
- return (int64_t) n;
- int64_t fibArray [n+1];
- fibArray[0] = 0;
- fibArray[1] = 1;
- for (int j = 2; j < n+1; j++) {
- fibArray[j] = fibArray[j - 1] + fibArray[j - 2];
- }
- return fibArray[n];
-
-}
-
-void test_solution() {
- assert(fibonacci_fast(3) == 2);
- assert(fibonacci_fast(10) == 55);
- for (int n = 0; n < 20; ++n)
- assert(fibonacci_fast(n) == fibonacci_naive(n));
+// int previous = 0;
+// int current = 1;
+//
+// for (int i = 0; i < n - 1; ++i) {
+// int tmp_previous = previous;
+// previous = current;
+// current = tmp_previous + current;
+// }
+//
+// return current % 10;
+//}
+
+int get_fibonacci_last_digit_optimized(int n) {
+ if (n <= 1)
+ return n;
+ int fibLastDigitArray[n];
+ fibLastDigitArray[0] = 0;
+ fibLastDigitArray[1] = 1;
+ for (int i = 2; i < n + 1; i++) {
+ fibLastDigitArray[i] = (fibLastDigitArray[i - 1]
+ + fibLastDigitArray[i - 2]) % 10;
+ }
+ return fibLastDigitArray[n];
}
+//TEST(FibLastDigitTest, Zero) {
+// ASSERT_EQ(get_fibonacci_last_digit_naive(0), 0);
+//}
+//
+//TEST(FibLastDigitTest, One) {
+// ASSERT_EQ(get_fibonacci_last_digit_naive(1), 1);
+//}
+//
+//TEST(FibLastDigitTest, Three) {
+// ASSERT_EQ(get_fibonacci_last_digit_naive(3), 2);
+//}
+//
+//TEST(FibLastDigitTest, Forty) {
+// ASSERT_EQ(get_fibonacci_last_digit_naive(40), 5);
+// ASSERT_EQ(get_fibonacci_last_digit_optimized(40), 5);
+//}
+//
+//TEST(FibLastDigitTest, ThreeThreeOne) {
+// ASSERT_EQ(get_fibonacci_last_digit_optimized(331), 9);
+// ASSERT_EQ(get_fibonacci_last_digit_optimized(327305), 5);
+//}
int main() {
- int n = 0;
+ int n;
std::cin >> n;
-
-// std::cout << fibonacci_naive(n) << '\n';
-// test_solution();
- std::cout << fibonacci_fast(n) << '\n';
- return 0;
-}
-
+ int c = get_fibonacci_last_digit_optimized(n);
+ std::cout << c << '\n';
+ }