[Copa Blue Bridge] Entrenamiento para el examen 2013 C ++ A Pregunta grupal 7 Notas incorrectas

 Billete incorrecto

Descripción del problema Una
unidad relacionada con el secreto emitió cierto tipo de facturas y tuvo que retirarlas todas al final del año.

Cada boleto tiene un número de identificación único. Los números de identificación de todas las facturas a lo largo del año son consecutivos, pero el número inicial de la identificación se selecciona al azar.

Debido a la negligencia del personal, se produjo un error al ingresar el número de identificación, lo que provocó que una identificación estuviera fuera de número y otra duplicada.

Su tarea es averiguar el ID del número roto y el ID del número repetido a través de la programación.

Suponga que un número roto no puede aparecer en el número más grande y más pequeño.

Formato de entrada Se
requiere que el programa ingrese un número entero N (N <100) para indicar el número de filas de datos.

Luego lea N filas de datos.

La longitud de cada línea de datos varía. Es un número (no más de 100) enteros positivos (no más de 100000) separados por espacios. Tenga en cuenta que puede haber espacios adicionales dentro y al final de la línea. Su programa necesita poder manejar estos espacios.

Cada entero representa un número de identificación.

Formato de salida El
programa debe generar una línea que contenga dos enteros mn, separados por espacios.

Entre ellos, m representa ID roto, n representa repitió ID
de entrada de muestra 1
2
5 6 8 11 9
10 12 9
salida de muestra 1
7 9
muestra de entrada 2
6
164 178 108 109 180 155 141 159 104 182 179 118 137 184 115 124 125 129, 168, 196,
172, 189, 127, 107, 112, 192, 103, 131, 133, 169, 158,
128, 102, 110, 148, 139, 157, 140, 195, 197,
185, 152, 135, 106, 123, 173, 122, 136, 174, 191, 145, 116, 151, 143, 175, 120, 161, 134, 162, 190,
149, 138, 142, 146, 199, 126, 165 153 193 144 156 166 170 121 171 132 101 194 187 188
113 130 176 154 177 120 117 150 114 183 186 181 100 163 160 167 147 198 111 119
Ejemplo de salida 2
105 120

 

Análisis del problema

La principal dificultad de esta pregunta en C ++ radica en el procesamiento de múltiples cadenas, como ingresar múltiples líneas, procesar caracteres de nueva línea (getchar () no debe ser menor) y dividir la cadena de salida (c ++ no escribe la función de división, usted necesita implementarlo usted mismo), convierta la cadena en un número entero (plantilla s2i ())

Almacene el número dividido de entrada en una matriz. El tamaño de la matriz se asigna de acuerdo con el significado de la pregunta y se ordena después del almacenamiento, de modo que se pueda obtener una secuencia ordenada de números. El fenómeno del punto de interrupción ocurre cuando la diferencia es 2 y la diferencia es 0. repetida. Tenga en cuenta que al hacer un bucle en la matriz, i comienza desde 1, i- (i-1) para evitar que la matriz se salga de los límites

¡El punto que es fácil de pasar por alto es que el título requiere un formato de salida ! Una línea, m, espacio, n, es decir, el número de puntos de ruptura, el número de espacios y el número de repeticiones, en este momento lo mejor es guardar el número obtenido en el proceso de búsqueda anterior con una variable!

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

int line;
const int maxN = 10000;
int data[maxN];

void s2i(string &str, int &num){
	stringstream ss;
	ss << str;
	ss >> num;
}

int main(int argc, char** argv) {
	scanf("%d", &line);
	getchar();		//去掉换行符,一定不能少 
	int index = 0;
	for(int i = 0; i < line; i++){
		string s;
		getline(cin, s); 
		istringstream iss(s);
		string tmp;
		
		while(getline(iss, tmp, ' ')){
			s2i(tmp, data[index]);
			index++;		
		}
	} 
//	cout << index ;
	
	//排序
	sort(data, data+index);
	int a, b; 
	//应该用变量记录下来断点和重复的数,因为并不知道断点和重复哪一个在前 
	//而题目要求先输出断点,后输出重复的数 
	for(int i = 1; i < index; i++){
		if(data[i] - data[i-1] == 2){	//断序的 
//			cout << data[i]-1 << endl;	//扣分 
			a = data[i]-1;
		}
		if(data[i] == data[i-1]){		//重复的 
//			cout << data[i] << endl;	//扣分 
			b = data[i];
		}
	}
	
	cout << a << " " << b;
	return 0;
}

 

Supongo que te gusta

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