Поиск цифры в числе,но не делением с остатком - C (СИ)
Формулировка задачи:
Есть ли возможность найти цифру в числовом элементе массива,кроме деления с остатком?
Задача состоит в том,что в массиве из 35 элементов удалить все числа кратные 7 или содержащих ее в записи .Применяя цикл while,я обнуляю те элементы,которые содержат на конце цифру 7 и кратные.А вот как найти числа (наподобие 172,573,275,т.е.содержащих в десятках цифру 7).
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <time.h> #define N 35 int poisk_x(int *arr, int sz); void input_array(int *A, int A_size); void print_array(int *A, int A_size); int main() { int i; int A[N]; srand(time(0)); input_array(A, N); puts("\nDo:"); print_array(A, N); for (i = N - 1; i != 0; --i) { while (A[i] % 7 == 0|| A[i] % 10 == 7 ) { int tmp = A[i]; A[i] = 0; break; } } puts("\nPosle:"); print_array(A, N); getchar(); return 0; } //int poisk_x(int *arr, int sz) //{ // int i = 0; // int idx = i; // for (i = 1; i<sz; ++i) { // if (arr[idx] % 7 == 0) // idx == 0; // } // return idx; //} void input_array(int *A, int A_size) { int i; for (i = 0; i<A_size; i++) { A[i] = 17 + rand() % (100-10); //генерируем массив } } void print_array(int *A, int A_size) { for (int i = 0; i<A_size; i++) { printf("%4d", A[i]); //printf("\n"); } puts(""); }
Ответа не будет?(((
Вот заменил все интересующие меня числа на ноль,как будет правильнее вывести новый массив уже без этих 0?
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <time.h> #define N 35 int poisk_x(int *arr, int sz); void input_array(int *A, int A_size); void print_array(int *A, int A_size); int main() { int y = 10; int i; int A[N]; srand(time(0)); input_array(A, N); puts("\nDo:"); print_array(A, N); for (i = N - 1; i != 0; --i) { while (A[i] % 7 == 0|| A[i] % 10 == 7||A[i]/y==7) { int tmp = A[i]; A[i] = 0; break; } } puts("\nPosle:"); print_array(A, N); getchar(); return 0; } void input_array(int *A, int A_size) { int i; for (i = 0; i<A_size; i++) { A[i] = 17 + rand() % (100-10); //генерируем массив } } void print_array(int *A, int A_size) { for (int i = 0; i<A_size; i++) { printf("%4d", A[i]); //printf("\n"); } puts(""); }
Решение задачи: «Поиск цифры в числе,но не делением с остатком»
textual
Листинг программы
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <time.h> #include <string.h> #define N 35 void input_array(int *A, int A_size); void print_array(int *A, int A_size); /*ЭТО КОСТЫЛЬ ДЛЯ ФУНКЦИИ ИТОА, КОТОРОЙ НЕТ В ЛИНУКСЕ*/ /* reverse: переворачиваем строку s на месте */ void reverse(char s[]) { int i, j; char c; for (i = 0, j = strlen(s)-1; i<j; i++, j--) { c = s[i]; s[i] = s[j]; s[j] = c; } } /*ЭТО КОСТЫЛЬ ДЛЯ ФУНКЦИИ ИТОА, КОТОРОЙ НЕТ В ЛИНУКСЕ*/ void itoa(int n, char s[]) { int i, sign; if ((sign = n) < 0) /* записываем знак */ n = -n; /* делаем n положительным числом */ i = 0; do { /* генерируем цифры в обратном порядке */ s[i++] = n % 10 + '0'; /* берем следующую цифру */ } while ((n /= 10) > 0); /* удаляем */ if (sign < 0) s[i++] = '-'; s[i] = '\0'; reverse(s); } /*ЗДЕСЬ ПРОГРАММА*/ int main() { char *ach; char p[17]; int y = 10; int i,X=0; int A[N]; srand(time(0)); input_array(A, N); puts("\nDo:"); print_array(A, N); for (i = N - 1; i != 0; --i) { while (A[i] % 7 == 0|| A[i] % 10 == 7||A[i]/y==7) { int tmp = A[i]; A[i] = 0; X++; break; } } int b_size = N; // Выделение памяти под новый массив и его заполнение int * b = (int *)malloc(sizeof(int) * b_size); for (i = b_size - 1; i != 0; --i) { //тоже с конца прогоняем по while (A[i] !=0) //условию,что элемент не равен 0 { b[i] = A[i];//то элемент второго массива равен элементу первого break; } } puts("\nPosle:"); //здесь кусочек добавим с итоа; while(i<sizeof(A))//цикл пока i менее длины массива { if(A[i]!=0)//если член массива не равен нулю itoa (A[i], p);//преобразуем член массива в строку и пишем его в строку p if(strchr(p,'7')!=NULL){//если функция strchr не возвращает NULL (Т.е. цифра 7 есть в строке A[i]=0;// присваиваем этому члену значение 0, а нули у нас отсекаются на печати. } i++; } print_array(A,b_size); getchar(); return 0; } void input_array(int *A, int A_size) { int i; for (i = 0; i<A_size; i++) { A[i] = 17 + rand() % (100-10); //генерируем массив } } /*ЗДЕСЬ ЦИКЛ WHILE ВМЕСТО FOR */ void print_array(int *A, int A_size) { int i=0; while(i<A_size) { if(A[i]!=0) printf("%4d", A[i]); //printf("\n"); i++; } puts(""); }
Объяснение кода листинга программы
- Объединение кода, который обращается к функциям, в единый блок.
- Создание нового массива b, размер которого совпадает с размером исходного массива A.
- Заполнение нового массива b значениями из исходного массива A.
- Присваивание значения 0 элементам исходного массива A, которые содержат цифру 7.
- Преобразование каждого ненулевого элемента исходного массива A в строку и проверка наличия цифры 7 в этой строке.
- Увеличение размера нового массива b до значения N.
- Вывод на экран исходного массива A и нового массива b.
- Ввод исходных данных с клавиатуры.
- Генерация случайных чисел для заполнения исходного массива A.
- Реализация функции reverse для переворачивания строки.
- Реализация функции itoa для преобразования целого числа в строку.
- Выделение памяти под новый массив b.
- Проверка наличия цифры 7 в строке, представляющей элемент исходного массива A.
- Уменьшение значения i на 1 при каждой итерации цикла.
- Использование функции strchr для поиска цифры 7 в строке.
- Отображение каждого элемента нового массива b, размер которого совпадает с размером исходного массива A.
- Использование функции printf для отображения каждого ненулевого элемента исходного массива A.
- Использование функции getchar для ожидания нажатия клавиши.
- Возврат значения 0 в конце программы.
- Использование функции rand для генерации случайного числа.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д