Incapaz de comprar
Descrição do problema
Xiao Ming abriu uma loja de doces. Ele é engenhoso: Embale o doce de frutas em dois pacotes de 4 peças e 7 peças. Os doces não podem ser vendidos sem embalagem.Quando uma criança vem comprar doces, ela usa esses dois tipos de embalagem para combinar. Claro, o número de doces não pode ser combinado, como 10 doces.
Você pode testá-lo com um computador. Neste caso, a quantidade máxima não disponível é 17. Qualquer número maior que 17 pode ser combinado com 4 e 7.
O requisito desta questão é encontrar o maior número que não pode ser combinado quando as quantidades de dois pacotes são conhecidas.
Formato de entrada
Dois inteiros positivos, indicando o número de açúcar em cada pacote (não mais do que 1000)Formato de saída
Um número inteiro positivo, indicando o número máximo de açúcares que não podem ser compradosEntrada de amostra 1
4 7
Saída de amostra 1
17
Entrada de amostra 2
5 3
Saída de amostra 2
7
Analise de problemas
Tire uma conclusão do significado da pergunta: porque deve haver uma solução, os dois números inseridos devem ser relativamente primos
a * x + b * y = C, xy é relativamente primo, o limite superior de C onde a equação tem uma solução e todos os inteiros são x * y;
Método 1: a lacuna entre 0 e 100 pontos
#include <iostream>
using namespace std;
int main(int argc, char** argv) {
int a, b;
cin >> a >> b;
cout << a * b - a - b << endl;
return 0;
}
Método 2: enumeração
Enumere todas as combinações de dois números, armazene-os na coleção e, finalmente, produza o número que não aparece na direção reversa, que é o maior número que não pode ser combinado!
#include <iostream>
#include <set>
using namespace std;
int main(int argc, char** argv) {
int a, b;
cin >> a >> b;
set<int> ss;
for(int x = 0; a*x <= a*b; x++){
for(int y = 0; a*x + b*y <= a*b; y++){
ss.insert(ss.end(), a*x+b*y);
}
}
for(int i = a*b; i >= 0; i--) {
if(ss.find(i) == ss.end()){ //i 不在set,即为答案
cout << i << endl;
break;
}
}
return 0;
}