Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #define SIZE 1000
- int input(int *arr);
- void output(int *arr, int size);
- int num_of_series(int *arr, int size);
- int delete_k_serie(int *arr, int size, int k);
- void swap_series(int *arr, int size, int k);
- int delete_series_lt_k(int *arr, int size, int k);
- int main()
- {
- int arr[SIZE];
- int *ptr = arr;
- int k;
- int arr_size = input(ptr);
- printf("There is %d series. \n\n", num_of_series(ptr, arr_size));
- printf("Enter k: ");
- scanf("%d", &k);
- printf("%d serie was deleted.\n", k);
- arr_size = delete_k_serie(ptr, arr_size, k);
- output(ptr, arr_size);
- printf("All series less than %d was deleted.\n", k);
- arr_size = delete_series_lt_k(ptr, arr_size, 3);
- output(ptr, arr_size);
- return 0;
- }
- int input(int *arr)
- {
- int n;
- puts("Enter size of array: ");
- scanf("%d", &n);
- for(int i = 0; i < n; i++)
- {
- printf("arr[%d] = ", i);
- scanf("%d", &arr[i]);
- }
- puts("\n");
- return n;
- }
- void output(int *arr, int size)
- {
- for(int i = 0; i < size; i++)
- {
- printf("arr[%d] = %d \n", i, arr[i]);
- }
- puts("\n");
- }
- int num_of_series(int *arr, int size)
- {
- int num = 1;
- for(int i = 1; i < size; i++) if (arr[i] != arr[i - 1]) num++;
- return num;
- }
- int delete_k_serie(int *arr, int size, int k)
- {
- int num_of_current_serie = 1;
- int size_of_k_serie = 0;
- int end_of_k_serie;
- if (num_of_series(arr, size) < k) return size;
- for(int i = 1; i < size; i++)
- {
- if (arr[i] != arr[i - 1]) num_of_current_serie += 1;
- if (num_of_current_serie == k)
- {
- size_of_k_serie += 1;
- end_of_k_serie = i;
- }
- }
- for(int i = end_of_k_serie + 1; i < size; i++) arr[i - size_of_k_serie] = arr[i];
- return size - size_of_k_serie;
- }
- /*void swap_series(int *arr, int size, int k)
- {
- if (num_of_series(arr, size) < k) return;
- int size_of_first_serie = 1;
- while (arr[size_of_first_serie] == arr[size_of_first_serie - 1]) size_of_first_serie += 1;
- int num_of_current_serie = 1;
- int size_of_k_serie = 0;
- int end_of_k_serie;
- for(int i = 1; i < size; i++)
- {
- if (arr[i] != arr[i - 1]) num_of_current_serie += 1;
- if (num_of_current_serie == k)
- {
- size_of_k_serie += 1;
- end_of_k_serie = i;
- }
- }
- if (size_of_first_serie == size_of_k_serie)
- {
- int difference = end_of_k_serie - size_of_first_serie + 1;
- int t;
- for(int i = 0; i < size_of_first_serie; i++)
- {
- t = arr[i];
- arr[i] = arr[i + difference];
- arr[i + difference] = t;
- }
- }
- else if (size_of_first_serie < size_of_k_serie)
- {
- int *first_serie = (int*) malloc(sizeof(int) * size_of_first_serie);
- for(int i = 0; i < size_of_first_serie; i++) first_serie[i] = arr[i];
- // Циклический сдвиг вправо на длину k-ой серии
- for(int i = size + size_of_k_serie; i > size_of_k_serie - 1; i--) arr[i] = arr[i - size_of_k_serie];
- // Перенос k-ой серии в начало
- for(int i = 0; i < size_of_k_serie; i++) arr[i] = arr[i + end_of_k_serie + 1];
- for(int i = 0; i < size_of_k_serie; i++) arr[i + end_of_k_serie - size_of_k_serie + 1] = first_serie[i];
- for(int i = end_of_k_serie - size_of_first_serie + 1; i < size + size_of_first_serie; i++) arr[i] = arr[i - size_of_k_serie + size_of_first_serie];
- for(int i = size_of_k_serie; i < size; i ++) arr[i] = arr[i + size_of_first_serie];
- }
- }*/
- int delete_series_lt_k(int *arr, int size, int k)
- {
- int len_of_current_serie = 1, start_of_current_serie = 0;
- int i = 1;
- while (i < size + 2)
- {
- if (arr[i] == arr[i - 1])
- {
- len_of_current_serie++;
- i++;
- }
- else
- {
- if (len_of_current_serie < k)
- {
- arr[start_of_current_serie] = 0;
- int difference = len_of_current_serie - 1;
- for(int j = start_of_current_serie + 1; j < size; j++)
- {
- arr[j] = arr[j + difference];
- size -= difference;
- }
- }
- len_of_current_serie = 1;
- start_of_current_serie = i;
- i++;
- }
- }
- return size;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement