Конечность алгоритма подразумевает, что... 1.алгоритм должен содержать только те команды, которые входят в систему команд исполнителя
2.алгоритм должен быть разбит на последовательность отдельно выполняемых шагов
3.любая команда алгоритма должна определять однозначное действие исполнителя
4.за конечное число шагов должен быть получен результат.
--- Python 3.8.3 ---
n = int(input('n: \n'))
counter = 0
for coin1 in range(0, n+ 1):
for coin2 in range(0, (n // 2) + 1):
for coin5 in range(0, (n // 5) + 1):
for coin10 in range(0, (n // 10) + 1):
if coin1 * 1 + coin2 * 2 + coin5 * 5 + coin10 * 10 == n: counter += 1
print(counter)
для n в пределах 100-200 считает вроде правильно, и достаточно быстро. Что до больших значений n, мне не хватило терпения. Ненормально это, успеть попить чаю в ожидании конца работы программы в 8 строк.
При желании можно использовать как стресс-тест ЦПУ
#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
void show_vector(vector <unsigned int> a)
{
for (unsigned int i = 0; i < a.size() - 1; i++)
cout << a[i] << " ";
cout << a.back() << endl;
}
bool f_prostoe(unsigned int x)
{
bool prostoe = true;
for(unsigned int i = 2; i <= int(sqrt(x)); i++)
{
if (x % i == 0)
{
prostoe = false;
break;
}
}
return prostoe;
}
int main()
{
bool pustoi = true;
vector <unsigned int> chisla = {0};
cout << "Введите диапазон, вначале min, затем max." << endl;
cout << "min = ";
unsigned int x;
cin >> x;
cout <<"max = ";
unsigned int y;
cin >> y;
for(x = x; x <= y; x++)
{
if(f_prostoe(x))
{
if (pustoi)
{
pustoi = false;
chisla.pop_back();
}
chisla.push_back(x);
}
}
cout << "Простые числа: " << endl;
show_vector(chisla);
return 0;
}
Объяснение:
В коде есть костыли, но он работает.