From 9489bbdb43c59033b9f2aad16a07c529cdc1e748 Mon Sep 17 00:00:00 2001 From: Max Ipatov Date: Thu, 11 Dec 2025 16:54:27 +0300 Subject: [PATCH 1/3] Solve task to print oreted and unique numbers --- src/rewrite/task1/main.c | 98 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 src/rewrite/task1/main.c diff --git a/src/rewrite/task1/main.c b/src/rewrite/task1/main.c new file mode 100644 index 0000000..26d5573 --- /dev/null +++ b/src/rewrite/task1/main.c @@ -0,0 +1,98 @@ +#include +#include + +void merge(int* arr, int left, int middle, int right) +{ + int i, j, k; + int n = middle - left + 1; + int m = right - middle; + int* leftArr = malloc(n * sizeof(int)); + int* rightArr = malloc(m * sizeof(int)); + + for (i = 0; i < n; i++) + leftArr[i] = arr[left + i]; + + for (j = 0; j < m; j++) + rightArr[j] = arr[middle + 1 + j]; + + i = 0; + j = 0; + k = left; + + while (i < n && j < m) { + if (leftArr[i] <= rightArr[j]) { + arr[k] = leftArr[i]; + i++; + } + else { + arr[k] = rightArr[j]; + j++; + } + k++; + } + + while (i < n) { + arr[k] = leftArr[i]; + i++; + k++; + } + + while (j < m) { + arr[k] = rightArr[j]; + j++; + k++; + } + + free(leftArr); + free(rightArr); +} + +void mergeSort(int* arr, int left, int right) +{ + if (left < right) { + int middle = left + (right - left) / 2; + mergeSort(arr, left, middle); + mergeSort(arr, middle + 1, right); + merge(arr, left, middle, right); + } +} + + +int* removeDuplicates(int* arr, int* arraySize) +{ + if (*arraySize <= 0) + return arr; + + int j = 0; + for (int i = 0; i < *arraySize - 1; i++) { + if (arr[i] != arr[i + 1]) + arr[j++] = arr[i]; + } + arr[j++] = arr[*arraySize - 1]; + + *arraySize = j; + return realloc(arr, *arraySize * sizeof(int)); +} + +int main(void) +{ + int* array = malloc(1 * sizeof(int)); + int number = 999; + int count = 0; + + while (number != 0) { + scanf("%d", &number); + count++; + array = realloc(array, count * sizeof(int)); + array[count - 1] = number; + } + + mergeSort(array, 0, count - 1); + array = removeDuplicates(array, &count); + + for (int i = 1; i < count; i++) + printf("%d ", array[i]); + + printf("\n"); + return 0; +} \ No newline at end of file From cc174122715229f8ace91081bc7aebc1e2795565 Mon Sep 17 00:00:00 2001 From: Max Ipatov Date: Thu, 11 Dec 2025 16:56:29 +0300 Subject: [PATCH 2/3] Solve task about minimize integer --- src/rewrite/task2/main.c | 58 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 src/rewrite/task2/main.c diff --git a/src/rewrite/task2/main.c b/src/rewrite/task2/main.c new file mode 100644 index 0000000..6e44e3f --- /dev/null +++ b/src/rewrite/task2/main.c @@ -0,0 +1,58 @@ +#include +#include + +long int minimizeNumber(long int n) +{ + if (n <= 0) { + return 0; + } + + int cnt[10] = {0}; + + while (n > 0) { + int d = n % 10; + cnt[d]++; + n /= 10; + } + + long int result = 0; + + for (int d = 1; d <= 9; d++) { + if (cnt[d] > 0) { + result = d; + cnt[d]--; + break; + } + } + + for (int d = 0; d <= 9; d++) { + while (cnt[d] > 0) { + result = result * 10 + d; + cnt[d]--; + } + } + + return result; +} + +bool testZero() +{ + return minimizeNumber(0) == 0; +} + +bool testWithZero() +{ + return minimizeNumber(1001) == 1001; +} + +bool testAllDigits() +{ + return minimizeNumber(8967450123L) == 1023456789L; +} + +int main(void) +{ + if (!testZero() || !testWithZero() || !testAllDigits()) + return 1; + return 0; +} From b13ed3a2dc408c659265e75bc82b51d0de7bd29a Mon Sep 17 00:00:00 2001 From: Max Ipatov Date: Thu, 11 Dec 2025 18:01:15 +0300 Subject: [PATCH 3/3] Create list --- src/rewrite/task3/list.c | 49 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 src/rewrite/task3/list.c diff --git a/src/rewrite/task3/list.c b/src/rewrite/task3/list.c new file mode 100644 index 0000000..533a3b1 --- /dev/null +++ b/src/rewrite/task3/list.c @@ -0,0 +1,49 @@ +#include + +typedef struct listItem { + struct listItem* before; + int value; + int index; +} + +listItem create() +{ + listItem* item = (*listItem)malloc(1 * sizeif(listItem)); + item->value = 0; + item->before = NULL; + item->index = 0; + return item; +} + + +listItem* insert(listItem* list, newValue* list, int where) +{ + if where > list->index { + listItem* correctItem; + correctItem->index = list->index + 1 + correctItem->before = list + } else { + listItem cursor = *list; + while (cursor->index != where) + cursor = cursor->before; + listItem* correctItem = *cursor; + + correctItem->value = *newValue; + } +} + +listItem* revert(listItem* list) +{ + int lenght = list->index + 1; + listItem after = NULL; + + while (list->index != 0) { + list->after = before; + list->index = lenght - list->index; + after = list; + list = list->before; + } + + return list; +} +