[Blue Bridge Cup] Entrenamiento para el examen 2013 C ++ A Pregunta grupal 4 Etiqueta de precio invertido

Etiqueta de precio al revés 

 La tienda de Xiao Li vende exclusivamente televisores de muestra que están fuera de los estantes de otras tiendas, que se pueden llamar tienda de TV de muestra.
    Los precios son de 4 dígitos (es decir, miles de yuanes).
    Para que el precio sea claro y conveniente, Xiao Li usó una etiqueta de precio prefabricada similar a un tubo digital, siempre que pintara los números con un bolígrafo de color (ver p1.jpg).
    Este tipo de etiqueta de precio tiene una característica, para algunas cifras, es razonable mirarla al revés. Por ejemplo: 1 2 5 6 8 9 0 está bien. De esta manera, si la marca está al revés, puede cambiar completamente a otro precio. Por ejemplo: 1958 al revés es: 8561, ¡que son unos miles de yuanes de descuento! 
    Por supuesto, en la mayoría de los casos, no se puede leer Por ejemplo, 1110 es No se puede revertir, porque 0 no se puede usar como número inicial.

    Un día, finalmente sucedió la tragedia. Un empleado colgó accidentalmente dos etiquetas de precio en la tienda. ¡Y los televisores de estas dos marcas de precio se han vendido!
    Afortunadamente, la diferencia de precio no es grande. Una de las etiquetas de precio perdió más de 200, mientras que la otra etiqueta de precio ganó más de 800. Juntos, ganaron más. 558 yuanes .
    Calcule basándose en esta información: ¿Cuál es el precio correcto de la etiqueta de precio que perdió dinero?

La respuesta es un número entero de 4 dígitos, envíe el número directamente a través del navegador.
Nota: No envíe el proceso de respuesta u otro contenido explicativo de apoyo.

 Enumere todos los números de cuatro dígitos que se pueden invertir

Inviértelo y marque la diferencia con el valor original, guárdelo en dos conjuntos, recorra la suma de los dos conjuntos y el resultado es 558 como la respuesta correcta.

Respuesta: 9088

#include <iostream>
#include <sstream>
#include <vector>
using namespace std;

//

void i2s(int num, string &str){
	stringstream ss;
	ss << num;
	ss >> str;
} 
void s2i(string &str,  int &num){
	stringstream ss;
	ss << str;
	ss >> num;
} 
char to(char x){
	if(x == '6')
		return '9';
	else if(x == '9')
		return '6';
	else 
		return x;
}
string reverse(const string & str){
	string res;
	for(int i = 3; i >= 0; i--){
		res.insert(res.end(), to(str[i]));
	}
	return res;
}

struct price{
	int a, b, c;
};

vector<price> v1;	//-200
vector<price> v2;	//+800

int main(int argc, char** argv) {
	
	for(int i = 1000; i < 10000; i++){
		string str;
		i2s(i, str);
		if(str.find('3') != string::npos || str.find('4') != string::npos || 
					str.find('7') != string::npos || str.rfind('0') == 3 ){
			continue;
		}
		string r = reverse(str);
		int r_int;
		s2i(r, r_int);
		int plus = r_int - i;
		if(plus > -300 && plus < -200){
			price p = {i, r_int, plus};
			v1.push_back(p);
		}else if(plus > 800 && plus < 900){
			price p = {i, r_int, plus};
			v2.push_back(p);
		}
		for(int i = 0; i < v1.size(); i++){
			for(int j = 0; j < v2.size(); j++){
				if(v1[i].c  + v2[j].c == 558){
					cout << v1[i].a << " "<< v1[i].b << " " << v1[i].c << endl;
					cout << v2[j].a << " "<< v2[j].b << " " << v2[j].c << endl;
					break;
				}
			}
		}
	}
		
	
	return 0;
}

 

Supongo que te gusta

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