Ввести ряд цифр и программа должна отсортировать из в порядке возрастания - C (СИ)
Формулировка задачи:
Помогите пожалуйста с возникшими трудностями...
Суть: нужно ввести ряд цифр и программа должна отсортировать из в порядке возрастания (НО! Если такая цифра повторяется, то ее не нужно вводить повторно. Пример: дан ряд 12 13 12 15 16 должен вывести 12 13 15 16)
#include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { int count = 5; int arr[5]; for (int i = 0; i < count; i++) { scanf("%d", &arr[i]); printf("%d ", arr[i]); } for (int i = 1; i < count; i++) { int temp = arr[i]; for (int j = i - 1; j >= 0; j--) { if (temp == arr[j]) { for (int k = i - 1; k < count; k++) { arr[k - 1] = arr[k]; } arr[count - 1] = '\0'; count--; i--; break; } if (arr[j] < temp) break; arr[j + 1] = arr[j]; arr[j] = temp; } } printf("\n"); for (int i = 0; i < count; i++) { printf("%d ", arr[i]); } return 0; }
Решение задачи: «Ввести ряд цифр и программа должна отсортировать из в порядке возрастания»
textual
Листинг программы
#include <stdio.h> #include <conio.h> int main () { int p[50]; int i, n, j; int count = 1; float res; printf("Size= "); scanf("%u",&n); printf("\nEnter elements: \n"); for (int i = 0; i < n; i++) { printf("Element[%d]= ", i+1); scanf("%u", &p[i]); } int temp=p[0]; for (i=1; i<n; i++) if(p[i]!=temp){ for (j=i+1; j<n; j++) if(p[i]==p[j]) p[j]=temp; count++; } printf("\nYou Mas:\n"); for (i=0; i<n; i++) printf("%i ", p[i]); printf("\n"); count=0; for (i=1; i<n; i++) if (p[i]!=p[0]) p[++count]=p[i]; printf("\nAfter del:\n"); for (i=0; i <= count; i++) printf("%i ", p[i]); printf("\nSort mas: \n"); for (int i = 0; i <= count; i++) for (int j = i+1; j <= count; j++) if (p[i] < p[j]){ int buf = p[i]; p[i] = p[j]; p[j] = buf; } for (int i = 0; i <= count; i++) printf("%i ", p[i]); getch(); return 0; }
Объяснение кода листинга программы
Вывод списка с номерами и названиями переменных:
- int p[50]; - массив для хранения чисел
- int i, n, j; - целочисленные переменные для работы с циклом
- int count = 1; - счетчик для сортировки
- float res; - переменная для хранения результата
- printf(
Size=
); - вывод сообщенияSize=
- scanf(
%u
,&n); - считывание числа в переменную n - printf(
\nEnter elements: \n
); - вывод сообщенияВведите элементы:
- for (int i = 0; i < n; i++) { - цикл для ввода элементов массива
- printf(
Element[%d]=
, i+1); - вывод сообщения с номером элемента - scanf(
%u
, &p[i]); - считывание числа в массив p - }
- int temp=p[0]; - временная переменная для хранения первого элемента массива
- for (i=1; i<n; i++) - цикл для сортировки массива
- if(p[i]!=temp){ - условие для прохода по циклу
- for (j=i+1; j<n; j++) - цикл для поиска одинаковых элементов
- if(p[i]==p[j]) - условие для замены элемента
- p[j]=temp; - замена элемента
- count++; - увеличение счетчика при каждой замене
- }
- printf(
\nYou Mas:\n
); - вывод сообщенияВаш массив:
- for (i=0; i<n; i++) - цикл для вывода элементов массива
- printf(
%i
, p[i]); - вывод элемента массива - printf(
\n
); - завершение вывода - count=0; - обнуление счетчика
- for (i=1; i<n; i++) - цикл для перестановки элементов
- if (p[i]!=p[0]) p[++count]=p[i]; - условие для добавления элемента в начало массива
- printf(
\nAfter del:\n
); - вывод сообщенияПосле удаления:
- for (i=0; i <= count; i++) - цикл для вывода элементов массива
- printf(
%i
, p[i]); - вывод элемента массива - printf(
\nSort mas: \n
); - вывод сообщенияСортированный массив:
- for (int i = 0; i <= count; i++) - цикл для сортировки элементов массива
- for (int j = i+1; j <= count; j++) - цикл для сравнения элементов
- if (p[i] < p[j]){ - условие для перестановки элементов
- int buf = p[i]; - временная переменная для хранения элемента
- p[i] = p[j]; - замена элемента
- p[j] = buf; - возврат элемента на место
- }
- printf(
%i
, p[i]); - вывод элемента массива - getch(); - получение отклика от пользователя
- return 0; - завершение программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д