C/C++
Задача по информатике, C++
Рассматривается множество целых чисел, принадлежащих числовому отрезку [2121; 13469], которые делятся на 3 и 15 и не делятся на 6, 12 и при этом третья справа цифра кратна 3. Найдите максимальное и минимальное из таких чисел. В ответе запишите сумму максимального и минимального чисел.
#include
#include
#include
using namespace std;
int third_from_right(int x) {
return x / 100 % 10;
}
bool equals(const int a, const int b) {
return a == b;
}
bool aliquot(const int x, const int a, const int b) {
return 0 == x % a && 0 == x % b;
}
int main() {
const auto dig = 3;
const auto x1 = 3;
const auto x2 = 15;
const auto y1 = 6;
const auto y2 = 12;
const auto a = 2121;
const auto b = 13469;
auto min = numeric_limits::max();
auto max = numeric_limits::min();
auto count = 0;
for (auto x = a; x x) min = x;
if (max < x) max = x;
++count;
}
}
}
if (count != 0) cout
#include <iostream>
int main() { int i, min, max;
for (i = 2121; i < 13470; i++)
if (i%15 == 0 && i%6 && i/100%10%3 == 0)
{ min = i; break; } for (i = 13469; i > min; i--)
if (i%15 == 0 && i%6 && i/100%10%3 == 0)
{ max = i; break; } std::cout << min + max; }
По-моему, тут самый лучший алгоритм такой: в восходящем цикле ищется самое маленькое подходящее число, а по его нахождении цикл тут же прекращается. Потом в нисходящем цикле ищется наибольшее подходящее число и при его нахождении цикл тоже тут же брейкуется. После чего складываем найденные min=2325 и max=13395 и выводим число 15720 - это правильный ответ (он правильный и у меня, и у Сергея Степанова, а вот во втором по счёту ответе на этот вопрос (это там, где какая-то странная "программа", которая зачем-то сделана с тремя модулями, четырьмя функциями и аж с целыми девятью auto) почему-то получается число 15705, что неверно !). Поиск же подходящих чисел производим по такой методологии: если число делится на 15 незачем тогда проверять его на делимость на 3, а если число не делится на 6, то и незачем тогда проверять его на неделимость на 12.
int main() { int i, min, max;
for (i = 2121; i < 13470; i++)
if (i%15 == 0 && i%6 && i/100%10%3 == 0)
{ min = i; break; } for (i = 13469; i > min; i--)
if (i%15 == 0 && i%6 && i/100%10%3 == 0)
{ max = i; break; } std::cout << min + max; }
По-моему, тут самый лучший алгоритм такой: в восходящем цикле ищется самое маленькое подходящее число, а по его нахождении цикл тут же прекращается. Потом в нисходящем цикле ищется наибольшее подходящее число и при его нахождении цикл тоже тут же брейкуется. После чего складываем найденные min=2325 и max=13395 и выводим число 15720 - это правильный ответ (он правильный и у меня, и у Сергея Степанова, а вот во втором по счёту ответе на этот вопрос (это там, где какая-то странная "программа", которая зачем-то сделана с тремя модулями, четырьмя функциями и аж с целыми девятью auto) почему-то получается число 15705, что неверно !). Поиск же подходящих чисел производим по такой методологии: если число делится на 15 незачем тогда проверять его на делимость на 3, а если число не делится на 6, то и незачем тогда проверять его на неделимость на 12.
#include <iostream>
#include <numeric>
constexpr int a = 2121, b = 13469;
int main()
{
constexpr int _lcm_ = std::lcm(3, 15);
int max_n{}, min_n{ 100000 };
int begin = a % _lcm_ ? (a + _lcm_ - a % _lcm_) : a;
for (; begin <= b; begin += _lcm_)
{
if (begin % 6 == 0 or ((begin / 100) % 10)%3 != 0) continue;
max_n = std::max(max_n, begin);
min_n = std::min(min_n, begin);
}
std::cout << max_n + min_n;
}
#include <numeric>
constexpr int a = 2121, b = 13469;
int main()
{
constexpr int _lcm_ = std::lcm(3, 15);
int max_n{}, min_n{ 100000 };
int begin = a % _lcm_ ? (a + _lcm_ - a % _lcm_) : a;
for (; begin <= b; begin += _lcm_)
{
if (begin % 6 == 0 or ((begin / 100) % 10)%3 != 0) continue;
max_n = std::max(max_n, begin);
min_n = std::min(min_n, begin);
}
std::cout << max_n + min_n;
}
Павел Гольдварг
какой ответ получился?
Похожие вопросы
- Задача по информатике, C++, помогите
- Задача по информатике C++
- Задача по программированию C++
- Помогите решить задачу пожалуйста, в C++
- Задача на языке C.
- Информатика, C++, задание
- Помощь с задачей на Си (C)
- Задача на языке C++
- Помогите пожалуйста сделать задачу по программированию C++
- Задача по матрице C++