Поиск цифры в числе,но не делением с остатком - 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 для генерации случайного числа.