Другие языки программирования и технологии

Найдите наибольшее четырехзначное число, которое при делении на любое однозначное число, кроме 1,2и3, дает в остатке 3

Помогите понять правильно ли решил! Найдем наименьшее число, которое делится на 4, 5, 6, 7, 8, 9 без остатка. Это число получится как произведение 57892520. Среди четырехзначных чисел наибольшее число с таким свойством 252037560. Для получения ответа прибавим к этому числу заданный оста-ток и найдем 756037563. и ответ 7563
наименьшее число, которое делится на 4, 5, 6, 7, 8, 9 без остатка
9*8*7*5=2520
если нужно наибольшее четырехзначное то еще *3 (4 много)
и прибавим требуемый остаток +3
2520*3+3=7563

но это не программирование.
Алексей Бодров
Алексей Бодров
4 361
Лучший ответ
Порядок величины в задании может быть другим, например не 4, а 9. И делителей может быть не 6, а 50! В этом случае произведение делителей может выйти за пределы, которые не допустимы для заданного типа данных, что приведёт к искажению результата и непредсказуемому поведению программы. Нужно делать циклами и в функции. Например в Си.. .

#include <stdio.h>
#include <conio.h>
#include <math.h>
unsigned search(const unsigned, const unsigned, unsigned *, const size_t);
int main() {
unsigned order_of_magnitude = 4; // Порядок величины
unsigned rest = 3; // Заданный остаток от деления
unsigned suite[] = { 4, 5, 6, 7, 8, 9 }; // Набор делителей
size_t size = sizeof(suite) / sizeof(int);
int result = search(order_of_magnitude, rest, suite, size);
if (result) printf(" Result = %d\n", result);
else printf(" No, an error!\n");
_getch();
return 0;
}
unsigned search(const unsigned _order_of_magnitude, const unsigned _rest, unsigned * _src, const size_t _size) {
unsigned n, m, right, left, result = 0;
if (_src && _size && _order_of_magnitude && _order_of_magnitude < 10 && _rest) {
right = (unsigned)pow(10.0, (int)_order_of_magnitude) - 1;
if (_rest <= right) {
left = (unsigned)pow(10.0, (int)_order_of_magnitude - 1);
for (n = right; n >= left; n--) {
for (m = 0; m < _size; m++) {
if (_rest > n) break;
if (n % _src[m] != _rest) break;
}
if (m == _size) {
result = n;
break;
}
}
}
}
return result;
}

Похожие вопросы