Вывод найденных элементов в обратном порядке - C (СИ)

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

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

такое дело, необходимо было найти 3 минимальных элементы в одномерном массиве А(30), что я и сделала. Теперь нужно переставить их местами в обратном порядке. Подскажите пожалуйста, как это сделать.
#include "stdafx.h"
#include "stdio.h"
#include "math.h"
#include "conio.h"
#include <cmath>
#include <Windows.h>
#include <cstdlib>

int _tmain(int argc, _TCHAR* argv[])
{
    SetConsoleOutputCP(1251);
    int A[100], n=100;
    int i=0, min, min1, min2, k, k1, k2;
    
    printf ("Vvedite razmernost'\n");
    scanf_s ("%d", &n);
        for(int i=0; i < n; i++){
        A[i] = rand()%100;
                printf("A[%d]=%d\n", i, A[i]);

        min=*A; 
        min1=*(A+1); 
        min2=*(A+2); 
    }
 
    for (i=0; i<n; i++)
    {
        if (A[i] < min){
            min2 = min1;
            min1 = min;
            min = A[i];
        }
        if ((A[i] != min) && (A[i] <= min1)) {
            min2 = min1;
            min1 = A[i];
        }
        if ((A[i] != min) && (A[i] != min1) && (A[i] <= min2)) {
            min2 = A[i];
        }
    }
 
    for (i=0; i<n; i++)
    {
        if (A[i] == min)
            k = i;
        if (A[i] == min1)
            k1 = i;
        if (A[i] == min2)
            k2 = i;
    }
    printf("4islo: %d, %d, %d. \n",min,min1,min2);
    printf("Nomer: %d, %d, %d. \n",k,k1,k2);
   
    _getch();
    return 0;
}

Решение задачи: «Вывод найденных элементов в обратном порядке»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 30
 
int main(void)
{
    int arr[SIZE], i, *min1 = arr, *min2 = arr, *min3 = arr, *first, *last;
    srand(time(NULL));
    
    for (i = 0; i < SIZE; i++)
    {
        arr[i] = rand() % 100;
        printf("%d ", arr[i]);
    }
    for (i = 1; i < SIZE; i++)
        if (arr[i] < *min1)
            min1 = &arr[i];
    for (i = 1; i < SIZE; i++)
        if (arr[i] < *min2 && min1 != &arr[i])
            min2 = &arr[i];
    for (i = 1; i < SIZE; i++)
        if (arr[i] < *min3 && min1 != &arr[i] && min2 != &arr[i])
            min3 = &arr[i];
    
    if (min1 < min2)
    {
        if (min1 < min3)
        {
            first = min1;
            last = min2 < min3 ? min3 : min2;
        }
        else
        {
            first = min3;
            last = min2;
        }
    }
    else if (min1 < min3)
    {
        first = min2;
        last = min3;
    }
    else
    {
        first = min2 < min3 ? min2 : min3;
        last = min1;
    }
    printf("\nmin1=%d, min2=%d, min3=%d,\nfirst min=%d, last min=%d\n", *min1, *min2, *min3, *first, *last);
    *first ^= *last ^= *first ^= *last; /* XOR swap */
 
    for (i = 0; i < SIZE; i++)
        printf("%d ", arr[i]);
 
    return 0;
}

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

В этом коде используется язык программирования C и решается задача поиска минимального элемента в массиве. Список действий:

  1. Объявляются переменные: массив arr, счетчик i, указатели min1, min2, min3, first и last.
  2. Заполняется массив arr случайными числами с помощью функции rand() и выводится на экран.
  3. Находится первый минимальный элемент min1.
  4. Находится второй минимальный элемент min2.
  5. Находится третий минимальный элемент min3.
  6. Вычисляются значения first и last, которые будут указывать на первый и последний минимальные элементы в порядке возрастания.
  7. Используется операция XOR для обмена значений first и last.
  8. Выводится на экран массив arr в обратном порядке.
  9. Программа завершается возвратом значения 0.

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


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

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

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