Уменьшить каждую цифру в записи числа на единицу и вернуть количество цифр - C (СИ)
Формулировка задачи:
Дана последовательность из n натуральных чисел.
Для каждого числа исходной последовательности уменьшить каждую цифру в записи числа на единицу(вместо 0 записать 9) и подсчитать количество цифр в записи числа.
Сформировать новую последовательность, поместив в нее преобразованные числа исходной последовательности . Упорядочить полученную последовательность по убыванию количества цифр в записи каждого числа. Вывести исходную последовательность на экран.
В программе использовать функцию, которая уменьшает каждую цифру в записи числа на единицу и возвращает количество цифр в записи числа . (Реализовать в си).
Народ помогите , хотя бы с минимальными коментами
Решение задачи: «Уменьшить каждую цифру в записи числа на единицу и вернуть количество цифр»
textual
Листинг программы
/* ============================================================================ Name : trash.c Author : Version : Copyright : Your copyright notice Description : Hello World in C, Ansi-style ============================================================================ */ #include <stdio.h> #include <stdlib.h> #include <time.h> typedef struct nm { int n; int s; }; int rebuild(int x); int cnt(int x); void insertSort(struct nm* a, int size); void print(struct nm* a, int size); int main(void) { const int n = 10; struct nm num[10]; int i = 0; // заполняем srand(time(0)); for (i = 0; i < n; ++i) { num[i].n = rand() % 100000; num[i].s = cnt(num[i].n); }; // печатаем print(num, n); // меняем for (i = 0; i < n; ++i) { num[i].n = rebuild(num[i].n); num[i].s = cnt(num[i].n); } // сортируем insertSort(num, n); // печатаем print(num, n); return EXIT_SUCCESS; } int rebuild(int x) { int n = x, m = 0; int p = 1; x ^= x; do { m = n % 10; /* цифра */ m = (m != 0) ? --m : 9; x += m * p; //printf("\n %d, %d %d %d\n", m, n, *x, p); p *= 10; n /= 10; /* следующий разряд*/ } while (n); return x; } int cnt( int x) { int count = 0; do { count++; x /= 10; } while (x); return count; // возвращаем число цифр } ; void insertSort(struct nm * a, int size) { int i, j, tmpn, tmps; // цикл проходов, i - номер прохода for (i = 1; i < size; ++i) { tmps = a[i].s; tmpn = a[i].n; // поиск места элемента в готовой последовательности for (j = i - 1; j >= 0 && a[j].s < tmps; --j) { // сдвигаем элемент направо, пока не дошли a[j + 1].s = a[j].s; a[j + 1].n = a[j].n; } a[j + 1].s = tmps; // место найдено, вставить элемент a[j + 1].n = tmpn; } } void print(struct nm* a, int size) { int i = 0; for (i = 0; i < size; ++i) { if (!i) printf("\n"); printf("%6d", a[i].n); // old }; for (i = 0; i < size; ++i) { if (!i) printf("\n"); printf("%6d", a[i].s); // old }; }
Объяснение кода листинга программы
Код представляет собой программу на языке C, которая выполняет следующие действия:
- Задаёт проблему: уменьшение каждой цифры в записи числа на единицу.
- Объявляет переменные и функции для решения проблемы.
- Заполняет массив структур 'num' случайными числами от 0 до 99999 и сохраняет количество цифр в каждой записи.
- Выводит на экран текущее значение каждой записи.
- Изменяет каждую цифру в каждой записи на уменьшенное на единицу значение.
- Сортирует массив структур 'num' по количеству цифр в каждой записи.
- Выводит на экран отсортированное значение каждой записи. Список действий, выполняемых в коде:
- Заполнение массива структур 'num' случайными числами от 0 до 99999 и сохранение количества цифр в каждой записи.
- Печать текущего значения каждой записи.
- Изменение каждой цифры в каждой записи на уменьшенное на единицу значение.
- Сортировка массива структур 'num' по количеству цифр в каждой записи.
- Печать отсортированного значения каждой записи. Переменные и функции, используемые в коде:
- 'n' - количество элементов в массиве структур 'num'.
- 'srand(time(0))' - инициализация генератора случайных чисел текущим временем.
- 'rand() % 100000' - генерация случайного числа от 0 до 99999.
- 'cnt(x)' - функция для подсчета количества цифр в числе 'x'.
- 'rebuild(x)' - функция для изменения каждой цифры в числе 'x' на уменьшенное на единицу значение.
- 'insertSort(num, n)' - сортировка массива структур 'num' по количеству цифр в каждой записи.
- 'print(num, n)' - печать текущего значения каждой записи. Вмешательство в код не требуется.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д