[Blue Bridge Cup] Entrenamiento para el examen 2013 C ++ A Pregunta grupal 8 Número no disponible

Incapaz de comprar

Descripción del problema
Xiao Ming abrió una tienda de dulces. Es ingenioso: empaca los dulces de frutas en dos paquetes de 4 piezas y 7 piezas. Los caramelos no se pueden vender sin envasar.

Cuando un niño viene a comprar dulces, usa estos dos tipos de envases para combinar. Por supuesto, la cantidad de caramelos no se puede combinar, como 10 caramelos.

Puede probarlo con una computadora. En este caso de embalaje, la cantidad máxima no disponible es 17. Cualquier número mayor que 17 se puede combinar con 4 y 7.

El requisito de esta pregunta es encontrar el número más grande que no se pueda combinar cuando se conocen las cantidades de dos paquetes.

Formato de entrada
Dos números enteros positivos, que indican la cantidad de azúcar en cada paquete (no más de 1000)

Formato de salida
Un entero positivo, que indica el número máximo de azúcares que no se pueden comprar.

Entrada de muestra 1
4 7
Salida de muestra 1
17
Entrada de muestra 2
5 3
Salida de muestra 2
7

Análisis del problema 

Saque una conclusión del significado de la pregunta: debido a que debe haber una solución, los dos números ingresados ​​deben ser primos relativos

a * x + b * y = C, xy es primo relativo, el límite superior de C donde la ecuación tiene una solución y todos los números enteros son x * y;

Método 1: la brecha entre 0 y 100 puntos

#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: enumeración

Enumere todas las combinaciones de dos números, guárdelos en la colección y finalmente genere el número que no aparece en la dirección inversa, que es el número más grande que no se puede combinar.

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

 

Supongo que te gusta

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