Website Summary Files Commits Branches @commit @diff @stats
path: root / Sem. 06 / Solutions / exercise06.cpp
diff options
context:
space:
mode:
Commite97247c85a207fdd86502e63360c6799f97b312e (patch)
Author
 Syndamia <kamen.d.mladenov@protonmail.com>
2021-11-17 09:17:58 +0200
Committer
 Syndamia <kamen.d.mladenov@protonmail.com>
2021-11-17 09:17:58 +0200
Files0db11244bd00a592a14a52609f7a86b25eeb3d0a /Sem. 06/Solutions/exercise06.cpp
Introduction_to_programming_FMI-sem06-solutions.tar
Introduction_to_programming_FMI-sem06-solutions.tar.gz
Introduction_to_programming_FMI-sem06-solutions.zip
Parentfc2f279a9344c31232275103c485d5c6335635ea (diff)
Solved all exercises from Sem06 sem06-solutions
1 files changed, 49 insertions, 0 deletions
-rw-r--r--Sem. 06/Solutions/exercise06.cpp49
diff --git a/Sem. 06/Solutions/exercise06.cpp b/Sem. 06/Solutions/exercise06.cpp
new file mode 100644
index 0000000..6c52db3
--- /dev/null
+++ b/Sem. 06/Solutions/exercise06.cpp
@@ -0,0 +1,49 @@
+#include <iostream>
+
+using namespace std;
+
+int smallestRemovedNumber(int nums[], int len) { // Works only for non-negative numbers
+ int pivot = len / 2, diff = 0, smallest = -1, biggest = 0;
+
+ while (pivot > 0) {
+ // Pivot going to the left
+ if (nums[pivot - 1] + 1 != nums[pivot])
+ smallest = nums[pivot] - 1;
+
+ // Pivot going to the right
+ if (nums[pivot + diff] + 1 != nums[pivot + diff + 1])
+ biggest = nums[pivot + diff] + 1;
+
+ diff += 2 + (pivot % 2);
+ pivot /= 2;
+ }
+
+ return (smallest == -1) ? biggest : smallest;
+}
+
+int biggestRemovedNumber(int nums[], int len) { // Works only for non-negative numbers
+ int pivot = len / 2, diff = 0, smallest = 0, biggest = -1;
+
+ while (pivot > 0) {
+ // Pivot going to the left
+ if (nums[pivot - 1] + 1 != nums[pivot])
+ smallest = nums[pivot] - 1;
+
+ // Pivot going to the right
+ if (nums[pivot + diff] + 1 != nums[pivot + diff + 1])
+ biggest = nums[pivot + diff] + 1;
+
+ diff += 2 + (pivot % 2);
+ pivot /= 2;
+ }
+
+ return (biggest == -1) ? smallest : biggest;
+}
+
+int main() {
+ int numbers1[7] = { 5, 6, 7, 9, 10, 12, 13 };
+ cout << smallestRemovedNumber(numbers1, 7) << " " << biggestRemovedNumber(numbers1, 7) << endl;
+
+ int numbers2[5] = { 10, 12, 13, 14, 16 };
+ cout << smallestRemovedNumber(numbers2, 5) << " " << biggestRemovedNumber(numbers2, 5) << endl;
+}