Всем привет, замучался решать эту несчастную задачу, совсем не понимаю (ну примерно понимаю), как реализовать её решение. Она звучит так: Можно ли разменять n рублей, на 3-рублевые, 5-рублевые и 1-рублевые монеты так, чтобы получить всего 10 монет, условие (10<n<50).
#include "stdio.h"
#include "locale.h"
int main() {
setlocale(LC_ALL, "Rus");
int m;
printf("Введите m: \n");
scanf_s("%d", &m);
int m1 = 0, m3 = 0, m5 = 0;
while (m5 < m / 5) {
m5++;
//printf("m5 = %d\n",m5);
}
while (m3 < 10 - m5) {
m3++;
//printf("m5 = %d\n",m5);
}
m1 = 10 - m5 - m3;
if (m1 + m5 + m3 == 10) {
printf("Кол-во 5-рублей = %d\nКол-во 3-рублей = %d\nКол-во 1-рублей = %d\n", m5, m3, m1);
}
Вывод логичный исходя из моего кода, но он неверный.

#include
int main()
{
int m;
int coins531[3]{};
std::cin >> m;
for (int i=10;i>0;i--)
{
if (m > i * 3)
{
m -= 5; coins531[0]++; continue;
}
if (m == i * 3)
{
m -= 3; coins531[1]++; continue;
}
if (m < i * 3)
{
m--; coins531[2]++; continue;
}
}
if (m) std::cout
тупой школьный метод:
цикл i от 0 до 50
цикл j от 0 до 50
цикл k от 0 до 50
если i*1+j*3+k*5 > n то прервать цикл k
если i*1+j*3+k*5 == n то нашли и надо проверить что 10 монет,
то бишь если i+j+k==10 то выход из всех циклов и мы нашли
Нельзя. Т.к. при размене 5 на 3+1+1 или 3 на 1+1+1 количество монет возрастает сразу на 2. Получается, ты не сможешь разменять ровно на 10 монет нечётное число: например 11, 13, ... и т.д.
Можно решить задачу наоборот: найти все решения уравнения:
10< 1*n1 + 3*n3 + 5*n5 <50 , при условии, что n1+n3+n5=10.
в условии написано можно ли. ответ - нет нельзя. уже при взятии максимального значения 10 монет не получается никак.
#include
int main() {
int n = 49;
int count5, count3, count1;
count5 = count3 = count1 = 0;
count5 = n / 5;
count3 = n % 5 / 3;
count1 = n % 5 % 3;
printf("%d, %d, %d", count5, count3, count1);
}