Duas Notas, problema resolvido! Confira abaixo.
Plataforma: URI (BEECROWD)
Problema: 2140
Enunciado:
Gilberto é um famoso vendedor de esfirras na região. Porém, apesar de todos gostarem de suas esfirras, ele só sabe dar o troco com duas notas, ou seja, nem sempre é possível receber o troco certo. Para facilitar a vida de Gil, escreva um programa para ele que determine se é possível ou não devolver o troco exato utilizando duas notas. As notas disponíveis são: 2, 5, 10, 20, 50 e 100.
Linguagens: C e C++
Solução:
Utilizei a mesma lógica nos dois códigos. Caso a condição de impossibilidade seja satisfeita, atribuo o valor zero a uma variável de controle (poderia imprimir direto "impossible" também, há outras formas válidas para este exercício). Se ela estiver em zero, imprime im. Depois disso, o código imprime possible.
Código em C:
#include <stdio.h> int main() { int n, m, troco, flag, indiceTermo1, indiceTermo2; int notas[6] = {2, 5, 10, 20, 50, 100}; while(1) { scanf("%i %i", &n, &m); flag = 1; if (n == 0 && m == 0) break; troco = m - n; for (indiceTermo1 = 0; indiceTermo1 < 6; indiceTermo1++) { for (indiceTermo2 = 0; indiceTermo2 < 6; indiceTermo2++) { if (troco == notas[indiceTermo1] + notas[indiceTermo2]) { flag = 0; break; } } } if (flag) printf("im"); printf("possible\n"); } return 0; }
#include <iostream> using namespace std; int main() { int n, m, troco, flag, indiceTermo1, indiceTermo2; int notas[6] = {2, 5, 10, 20, 50, 100}; while(1) { cin >> n >> m; flag = 1; if (n == 0 && m == 0) break; troco = m - n; for (indiceTermo1 = 0; indiceTermo1 < 6; indiceTermo1++) { for (indiceTermo2 = 0; indiceTermo2 < 6; indiceTermo2++) { if (troco == notas[indiceTermo1] + notas[indiceTermo2]) { flag = 0; break; } } } if (flag) cout << "im"; cout << "possible" << endl; } return 0; }