[Blue Bridge Cup] Treinamento para o exame 2013 C ++ A Pergunta do grupo 8 Número indisponível

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 comprados

Entrada 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;
}

 

Acho que você gosta

Origin blog.csdn.net/weixin_44566432/article/details/115144784
Recomendado
Clasificación