![]() |
Последовательность чисел
Помогите пожалуйста!
Есть программа, которая реализует работу с последовательностью чисел. Вводим 10 чисел - она формирует их по возростанию. Но нужно ещё, кроме этого составить новую последовательность, выкинув из неё самое минимальное и самое максимальное число. Как это сделать? #include <stdio.h> #include <conio.h> #include <stdlib.h> void main(void) { int n[10]; int i; float min, max; float*a; printf ("\n 10:"); scanf("%d" , &n); a=(float*)calloc(n,sizeof(float)); for(i=0; i<n;i++) { scanf("%f" ,&a[i]); } min=a[0]; max=a[0]; for(i=1; i<n;i++) } if(min>a[i]) min=a[i]; if(max<a[i]) max=a[i]; } printf ("min=%.1f" ,min); printf ("max=%1f" ,max); getch (); free (a); } Заранее спасибо! |
программа выполняет несколько иную задачу :)
|
Что-то чепуха написана у вас в коде :)
Делается это просто в два шага: 1. Сортируется. 2. Убирается первый и последний элементы. Код:
#include <stdio.h> |
5pliT,
Цитата:
|
Это алгоритм обмена значений переменных.
Примерно тоже самое: int temp=in[i]; in[i]=in[j]; in[j]=temp; |
Цитата:
Код:
in[i] ^= in[j] Принцип пузырьковой сортировки |
Здесь нет третей переменной, поэтому я и использовал этот алгоритм.
Можно расписать его как последовательность операций: in[i]=in[i]^in[j]; in[j]=in[j]^in[i]; in[i]=in[i]^in[j]; ^ - это xor (математики называют эту операцию "исключающее ИЛИ" или "сумма по модулю 2" или "кольцевая сумма") 0^0=0 0^1=1 1^0=1 1^1=0 например a=5,b=7; a=101 b=111 a=a xor b a=101 xor 111=010=2 b=b xor a b=111 xor 010=101=5=a (первоначальное) a=a xor b a=010 xor 101=111=7=b (первоначальное) Алгоритм пузырьковой сортировки заключается в последовательном (начиная с разных концов массива) сравнении всех элементов друг с другом. Если нужная последовательность не сохраняется, то элементы меняются местами. Здесь я использовал рекурсивный алгоритм быстрой сортировки. Он заключается в последовательном выборе элемента (обычно который называют медианой или опорным элементом). Затем элементы упорядочиваются относительно него, тоесть все меньшие в одну сторону, все большие в другую. Затем для каждой из частей (левой и правой) рекурсивно запускается тотже алгоритм. Тоесть опять выбирается медиана и массив разделяется на две части. Алгоритм этот достаточно быстрый и запись его на Си очень локанична. |
5pliT,
Я почему спрашивал, просто эту операцию ещё не изучал Цитата:
|
Время: 11:41. |
Время: 11:41.
© OSzone.net 2001-