aboutsummaryrefslogtreecommitdiff
path: root/week08/ex2.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'week08/ex2.cpp')
-rw-r--r--week08/ex2.cpp51
1 files changed, 51 insertions, 0 deletions
diff --git a/week08/ex2.cpp b/week08/ex2.cpp
new file mode 100644
index 0000000..1419132
--- /dev/null
+++ b/week08/ex2.cpp
@@ -0,0 +1,51 @@
+#include <iostream>
+
+void tryResize(int*& numbers, size_t& numbersSize, size_t numbersCount) {
+ if (numbersCount < numbersSize) {
+ return;
+ }
+
+ numbersSize *= 2;
+ int* biggerArray = new int[numbersSize];
+ for (size_t i = 0; i < numbersCount; i++) {
+ biggerArray[i] = numbers[i];
+ }
+
+ delete[] numbers;
+ numbers = biggerArray;
+}
+
+void addToEndOfArray(int value, int*& numbers, size_t& numbersSize, size_t& numbersCount) {
+ tryResize(numbers, numbersSize, numbersCount + 1);
+ numbers[numbersCount] = value;
+ numbersCount += 1;
+}
+
+int main() {
+ int* numbers = new int[1];
+ size_t numbersSize = 1;
+ size_t numbersCount = 0;
+
+ int buffer;
+ std::cin >> buffer;
+ while(buffer != 0) {
+ addToEndOfArray(buffer, numbers, numbersSize, numbersCount);
+ std::cin >> buffer;
+ }
+
+ size_t R;
+ std::cin >> R;
+
+ int* rotated = new int[numbersCount];
+ for (int i = 0; i < numbersCount; i++) {
+ rotated[(i + R + numbersCount) % numbersCount] = numbers[i];
+ }
+ delete[] numbers;
+
+ for (int i = 0; i < numbersCount; i++) {
+ std::cout << rotated[i] << " ";
+ }
+ std::cout << std::endl;
+
+ delete[] rotated;
+}