Составить минимальное число из введенных цифр
Как отсортировать числа чтобы получилось в порядке возрастания? Input: 7 4561501 Output: 1014556. Понимаю как отсортировать , но как отсортировать и чтобы первое число не было 0 не получается , уже испробовал многое.
#include <stdio.h>
int main() {
char a[1000];
int dryg[1000];
int c, n, j = 0, buf = 0, min = 0;
int i = 0;
scanf_s("%d", &n);
a[0] = getchar();
for (i = 0; i < n; ++i)
a[i] = getchar() - '0';
for (int i = 0; i < n; ++i)
dryg[i] = 0;
for (int i = 0; i < n; ++i) {
for (i = 0; i < n - 1; i++) {
min = i;
for (j = i + 1; j < n; j++)
if (a[j] < a[min])
min = j;
buf = a[i];
a[i] = a[min];
a[min] = buf;
}
}
for (int i = 0; i < n; ++i) {
dryg[i] += a[i];
}
for (i = 0; i < n; ++i) {
printf("%d", dryg[i]);
}
}
Ответы (1 шт):
Автор решения: Zhihar
→ Ссылка
если задача ввести n цифр и отсортировать по возрастанию цифры, то это можно делать так:
- считаем какие цифры вводились сколько раз
- при выводе сначала выводим одну цифру больше
0и ближайшую к0(т.е. от1до9приоритет) - уменьшаем счетчик данной цифры на
1 - выводим последовательно все цифры от
0до9заданное кол-во раз (сколько раз их ввели)
код:
// кол-во введённых цифр
int digits_count[10];
memset(digits_count, 0, 10 * sizeof(int));
// ввести n цифр и подсчитать сколько раз вводили каждую отдельную цифру
for (int i = 0; i < n; i++) {
const int digit = getchar() - '0';
if ((digit >= 0) && (digit <= 9))
digits_count[digit] ++;
else
i -= 1;
}
// вывести первую минимальную цифру большую 0
for (int digit = 1; digit < 10; digit++) {
if (digits_count[digit] > 0) {
printf("%d", digit);
digits_count[digit] --;
break;
}
}
// вывести отсортированные цифры
for (int digit = 0; digit < 10; digit++) {
for (int count = 0; count < digits_count[digit]; count++) {
printf("%d", digit);
}
}
P.S.
комментарии - это так, для понимания, вот не помню в голом C были ли такие или надо только /* */ ставить :)