Задача
Задача из сборника задач по программированию Абрамова С.А. 2000 г.
Даны натуральные числа [latex]n[/latex], [latex]m[/latex]. Получить все меньшие [latex]n[/latex] натуральные числа, квадрат суммы цифр которых равен [latex]m[/latex].
Входные данные:
Два положительных числа [latex]n[/latex] и [latex]m[/latex].
Выходные данные:
Все целые числа из [latex]\left( 0,n \right)[/latex], удовлетворяющие условию.
Тесты
№ | Входные данные | Выходные данные | |
[latex]n[/latex] | [latex]m[/latex] | ||
1 | 1234 | 9 | 3 12 21 30 102 111 120 201 210 300 1002 1011 1020 1101 1110 1200 |
2 | 100 | 4 | 2 11 20 |
3 | 49 | 49 | 7 16 25 34 43 |
4 | 1000 | 1 | 1 10 100 |
Код программы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#include <iostream> using namespace std; int main() { unsigned n, m, t, sum, i=1; cin>>n>>m; for(i;i<n;i++){ t=i; sum=0; while(t!=0){ sum+=t%10; t/=10; } if(sum*sum==m)cout<<i<<" "; } return 0; } |
Решение
Для того, чтоб найти каждую цифру числа будем искать остаток от деления на [latex]10[/latex], которым является последняя цифра числа, а затем делить число нацело на [latex]10[/latex], чтоб предпоследняя цифра стала последней. Будем повторять эту операцию пока число не равно [latex]0[/latex]. Все полученные цифры числа складываем. Таким способом будем искать сумму цифр каждого целого числа от [latex]1[/latex] до [latex]n-1[/latex], параллельно возводя полученную сумму в квадрат, а результат сравнивая с [latex]m[/latex].
Ссылки
- Код программы.
- Условие задачи (страница 135).