Поменять местами первый и минимальный элементы массива - C (СИ) (70908)
Формулировка задачи:
Заданный массив. Поменять местами его первый и минимальный элементы. Если элементов с минимальным значением несколько, взять последний из них.
Решение задачи: «Поменять местами первый и минимальный элементы массива»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 11
int main ( void )
{
unsigned char numberArray[SIZE], counter, tempCounter = 0, minValue = 0;
unsigned char tempVariable = 0;
srand( time( NULL ));
// заполняет массив значениями
for ( counter = 0; counter < SIZE; ++counter ) {
if ( counter == 0 )
printf( "%s", "Before: " );
printf( "%3hhu", numberArray[counter] = 1 + rand () % 10 );
}
minValue = numberArray[0];
for ( counter = 1; counter < ( SIZE * 2 ) + 1; ++counter ) {
// ищет мин элемент
if ( numberArray[counter] < minValue && counter < SIZE ) {
minValue = numberArray[counter];
tempCounter = counter;
}
// если мин элементов больше одного - выбирает последний
if ( tempCounter > 0 && minValue == numberArray[counter] && counter < SIZE )
tempCounter = counter;
// если мин элемент совпадает с первым нет смысла продолжать
if ( counter == SIZE && minValue == numberArray[0] ) {
puts( "\nImpossible change values" );
break;
}
// меняет элементы местами
if ( counter == SIZE ) {
printf( "\n%s", "After: " );
tempVariable = numberArray[0];
numberArray[0] = numberArray[tempCounter];
numberArray[tempCounter] = tempVariable;
tempCounter = 0;
}
// выводит новый порядок на экран
if ( counter > SIZE )
printf( "%3hhu", numberArray[tempCounter++] );
}
puts( "" );
return 0;
}