Составить минимальное число из введенных цифр

Как отсортировать числа чтобы получилось в порядке возрастания? 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 цифр и отсортировать по возрастанию цифры, то это можно делать так:

  1. считаем какие цифры вводились сколько раз
  2. при выводе сначала выводим одну цифру больше 0 и ближайшую к 0 (т.е. от 1 до 9 приоритет)
  3. уменьшаем счетчик данной цифры на 1
  4. выводим последовательно все цифры от 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 были ли такие или надо только /* */ ставить :)

→ Ссылка