Удалить из массива все элементы, у которых первая и вторая цифры одинаковые - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Дан массив целых чисел из n элементов, заполненный случайным образом числами из заданного пользователем промежутка. Удалить из него все элементы, у которых первая и вторая цифры одинаковые. Отсортировать получившийся массив и вывести его на экран и в файл.

Решение задачи: «Удалить из массива все элементы, у которых первая и вторая цифры одинаковые»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <memory.h>
#include <math.h>
 
#define N 100
 
bool isequal(long n);
void swap(int& n1, int& n2);
 
int main(int argc, char* argv[])
{
    FILE* fp = NULL;
    const char* filename = "output.txt";
    if ((fp = fopen(filename,"w")) == NULL)
    {
        printf("Unable to open file %s for writing\n",filename);
        return -1;
    }
    
    int* A = new int[N];
    memset((void*)A, 0x00, sizeof(int) * N);
 
    for (int t = 0; t < N; t++)
    {
        A[t] = rand() % (10 * (N-1)) + 1;
        printf("%d ",A[t]);
    }
 
    printf("\n\n");
 
    for (int i = 0; i < N; i++)
        if (isequal(A[i]))
        {
            printf("%d ",A[i]);
            for (int k = i; k < N; k++)
                A[k] = A[k+1];
        }
 
    printf("\n\n");
 
    for (int q = 0; A[q] > 0; q++)
    {
        int min = q;
        for (int r = q+1; A[r] > 0; r++)
            min = (A[r] < A[min]) ? r : min;
 
        swap(A[q],A[min]);
    }
 
    for (int z = 0; A[z] > 0; z++)
    {
        printf("%d ",A[z]);
        fprintf(fp, "%d ",A[z]);
    }
 
    printf("\n");
 
    fclose(fp);
 
    _getch();
 
    return 0;
}
 
bool isequal(long n)
{  
    long i = 6;
    while ((n / (long)pow((double)10,i)) == 0) i--;
    return (n / (long)pow((double)10,i)) % 10 == 
        (n / (long)pow((double)10,i-1)) % 10 ? 1 : 0;
}
 
void swap(int& n1, int& n2)
 { int _tn = n1; n1 = n2; n2 = _tn; }

Объяснение кода листинга программы

В этом коде реализована сортировка массива методом слияния. Сначала мы создаем массив целых чисел A динамически, заполняем его случайными числами от 1 до 1000000. Затем мы проверяем каждое число в массиве с помощью функции isequal, которая проверяет, являются ли первая и вторая цифры числа одинаковыми. Если это так, мы удаляем число из массива, перемещая последующие числа на одну позицию вперед. Далее мы используем алгоритм сортировки слиянием для сортировки массива. Мы находим минимальный элемент в неотсортированной части массива и меняем его местами с первым элементом неотсортированной части. Повторяем эту операцию до тех пор, пока массив не будет полностью отсортирован. Наконец, мы записываем отсортированный массив в файл output.txt и выводим его на экран.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4 из 5
Похожие ответы