C/C++

Университетская задача на циклы в языке С

Всем привет, замучался решать эту несчастную задачу, совсем не понимаю (ну примерно понимаю), как реализовать её решение. Она звучит так: Можно ли разменять 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
Виктор Попов
Виктор Попов
51 416
Лучший ответ
Жасур Камолходжаев Язык си, не с++. (хотя легко исправить можно, спасибо)
тупой школьный метод:
цикл 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.
Жасур Камолходжаев да, так решить и нужно, надо алгоритм решения написать. вот я его и пытаюсь написать.
Айдар И Назия Жантоковы /* Я напишу решение для одного случая. Допустим, у нас все монеты рублями: */

unsigned int m1=m, m3=0, m5=0;

/* Меняем на крупные, пока монет не станет 10: */

while(m==(m1+3*m2+5*m3))
{ m3++; m1-=3;
if((m1+m3+m5)>13){ m5++; m3-=1; m1-=2 };
if((m1+m3+m5)<=10) break;
};
if((m1+m3+m5)==10) printf("Решение: %u = %u+3x%u+5x%u; \r\n",m,m1,m3,m5);
else printf("Нет решения \r\n");
в условии написано можно ли. ответ - нет нельзя. уже при взятии максимального значения 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);
}
Кирилл Бельды
Кирилл Бельды
10 596