Ввести ряд цифр и программа должна отсортировать из в порядке возрастания - 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; - завершение программы