Вывод найденных элементов в обратном порядке - 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 и решается задача поиска минимального элемента в массиве. Список действий:
- Объявляются переменные: массив arr, счетчик i, указатели min1, min2, min3, first и last.
- Заполняется массив arr случайными числами с помощью функции rand() и выводится на экран.
- Находится первый минимальный элемент min1.
- Находится второй минимальный элемент min2.
- Находится третий минимальный элемент min3.
- Вычисляются значения first и last, которые будут указывать на первый и последний минимальные элементы в порядке возрастания.
- Используется операция XOR для обмена значений first и last.
- Выводится на экран массив arr в обратном порядке.
- Программа завершается возвратом значения 0.