[] Estructura de datos y estudio algoritmo de notas - "notas" algoritmo -8

secuencia

seleccionar

Ordenar
el aprendizaje de la más común seleccionar Hey Silencio, alta complejidad de O (n- 2 )
Ejemplo:

Ordenar la inserción

Aprender los más suerte inserción directa intuitiva
ejemplo:

La aplicación de la función de clasificación

Recomendado el uso directo del lenguaje C o C ++ funciones de biblioteca qsort en la función de clasificación para escribir código
función de clasificación es de cabecera <algoritmo>
Su uso debe ser añadido

#include<algorithm>
using namespace std;

Formato de la función es la siguiente:

sort(首元素地址(必填),尾元素地址的下一个地址(必填),比较函数(非必填));

Si no se escribe la función de comparación, el rango por defecto determinada llevada a cabo anteriormente enascendente.
Puede ser ordenado / flotador / tipo de datos CHAR int y otros tipos
Ejemplo:

#include <cstdio>
#include <algorithm>
using namespace std;


int main()
{
	int a[6] = { 9,4,2,5,6,-1 };//从小到大排序a[0]到a[3]
	sort(a, a + 4);
	for (int i = 0; i < 6; i++)
	{
		printf("%d ", a[i]);
	}
	printf("\n");
	//从小到大排序a[0]到a[5]
	sort(a, a + 6);
	for (int i = 0; i < 6; i++)
	{
		printf("%d ", a[i]);
	}
	return 0;
}

Cómo implementar la función de comparación CMP

tercer parámetro opcional es la función de comparación función de clasificación (por lo general una función de la escritura CMP), un ser humano no tiene que desarrollar la relación entre el tamaño y el tipo de comparación gobierna estructuras comparables comparativos y similares.
Aprende los tipos de datos básicos, el tipo de estructura, la regla cmp contenedor STL ordenar una costumbre escritos:

  1. Clasificación de tipo de datos básico de la matriz
    si no llena cmp, el valor predeterminado es pequeño a grande, quiero lograr orden descendente, es necesario el uso cmp "decir" cuando se cambia de elemento de tipo
    ejemplo:
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;

bool cmp(int a, int b) {
	return a > b;//理解为当a>b时把a放在b前面
}

int main()
{
	int a[6] = { 9,4,2,5,6,-1 };
	sort(a, a + 6,cmp);
	for (int i = 0; i < 6; i++)
	{
		printf("%d ", a[i]);
	}
	return 0;
}
  1. Ordenando matriz de estructuras
    Se define la siguiente estructura:
struct node {
	int x, y;
}ssd[10];

1). A Ordenar
si quieres serie SSD ordenadas según descendente X puede ser escrita función cmp

bool cmp(node a, node b) {
	return a.x > b.x;//理解为当a>b时把a放在b前面
}

Ejemplo:

#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;

struct node {
	int x, y;
}ssd[10];

bool cmp(node a, node b) {
	return a.x > b.x;//理解为当a>b时把a放在b前面
}

int main()
{
	ssd[0].x = 2;
	ssd[0].y = 2;
	ssd[1].x = 1;
	ssd[1].y = 3;
	ssd[2].x = 3;
	ssd[2].y = 1;
	sort(ssd, ssd + 3,cmp);
	for (int i = 0; i < 3; i++)
	{
		printf("%d %d\n", ssd[i].x,ssd[i].y);
	}
	return 0;
}

salida:

3 1
2 2
1 3
请按任意键继续. . .

2).dos clasificación
X orden descendente de acuerdo con el primero, pero cuando x es igual al caso en que, en el, cmp entonces conjunto y-pequeño a grande:

bool cmp(node a, node b) {
	if (a.x != b.x)
		return a.x > b.x;
	else
		return a.y < b.y;
}

Ejemplo:

#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;

struct node {
	int x, y;
}ssd[10];

bool cmp(node a, node b) {
	if (a.x != b.x)
		return a.x > b.x;
	else
		return a.y < b.y;
}

int main()
{
	ssd[0].x = 2;
	ssd[0].y = 2;
	ssd[1].x = 1;
	ssd[1].y = 3;
	ssd[2].x = 2;
	ssd[2].y = 1;
	sort(ssd, ssd + 3,cmp);
	for (int i = 0; i < 3; i++)
	{
		printf("%d %d\n", ssd[i].x,ssd[i].y);
	}
	return 0;
}

salida:

2 1
2 2
1 3
请按任意键继续. . .
  1. Clasificar el recipiente
    en un contenedores estándar STL,Sólo vector, cuerda, deque es una especie deEsto se debe a que el conjunto de imágenes, asignar dichos recipientes es lograr árbol rojo-negro, los puntos ordenados en sí, no se le permite utilizar el criterio de ordenación.
    Por ejemplo, para vector:
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;

struct node {
	int x, y;
}ssd[10];

bool cmp(int a, int b) {
	return a > b;//由于vector中的元素为int型,因此仍然是Int的比较
}

int main()
{
	vector<int> vi;
	vi.push_back(3);
	vi.push_back(1);
	vi.push_back(2);
	sort(vi.begin(), vi.end(), cmp);//对整个vector排序
	for (int i = 0; i < 3; i++)
	{
		printf("%d ", vi[i]);
	}
	return 0;
}

salida:

3 2 1 请按任意键继续. . .

Mira especie de cadena:

#include <cstdio>
#include <vector>
#include <algorithm>
#include <string>
#include <iostream>
using namespace std;

int main()
{
	string str[3] = { "bbbb","cc","aaa" };
	sort(str, str + 3);//将string型数组按字典序从小到大输出
	for (int i = 0; i < 3; i++)
	{
		//printf("%s \n",str[i]);//注意这里不能用printf,至于为什么,目前还不知道==
		cout << str[i] << endl;
	}
	return 0;
}

Tenga en cuenta que no se puede utilizar printf, por qué no se sabe
salida:

aaa
bbbb
cc
请按任意键继续. . .

Si desea reemplazar desde pequeñas a grandes, para el

#include <cstdio>
#include <vector>
#include <algorithm>
#include <string>
#include <iostream>
using namespace std;

bool cmp(string str1,string str2) {
	return str1.length() < str2.length();
}

int main()
{
	string str[3] = { "bbbb","cc","aaa" };
	sort(str, str + 3,cmp);//将string型数组按字典序从小到大输出
	for (int i = 0; i < 3; i++)
	{
		//printf("%s \n",str[i]);//注意这里不能用printf,至于为什么,目前还不知道==
		cout << str[i] << endl;
	}
	return 0;
}

salida:

cc
aaa
bbbb
请按任意键继续. . .

Los estudiantes logran la clasificación

reglas de clasificación de los estudiantes individuales: diferentes puntuaciones diferentes clasificaciones, que ocupan el mismo, pero una fracción de la misma fila en fila, hay dos maneras de calcular el ranking :( matriz después de clase)

  1. Si la puntuación actual es igual al individuo en una puntuación individual en un rango igual rango, o rango igual al índice de matriz + 1;
  2. Si el título no tiene que graduaciones muy récord, siempre y cuando la salida: Deje que el valor inicial de int tipo de variable r es 1, entonces atravesar toda persona, si el individuo no es la primera corriente individual y la puntuación del individuo actual no es igual a la última puntuación individual, r es igual a la mesa de matriz se incrementa en uno. Esta práctica se aplica a requerir una salida muy alta información, los primeros resultados del método en el caso de los códigos largos.
    Ejemplo:
    habitación n-examen, y el número del billete se dan fracción de cada uno de los candidatos en la sala de examen, se requiere que todos los candidatos por puntuación en orden descendente, y da salida secuencialmente todo número de ticket candidatos, clasificación, y la clasificación de los números de examen sala de examen;
#include <cstdio>
#include <vector>
#include <algorithm>
#include <string>
#include <iostream>
using namespace std;

struct student {
	long long  number;
	int score;
	int num;
	int rank0;
	int rank1;
}stu[100];

bool cmp(student a,student b) {
	if (a.score == b.score)
		return a.number < b.number;
	else
		return a.score > b.score;
}

//n个考场,给出各考场中考生的准考证号和分数,
//要求所有考生按分数从高到低排序,
//并按顺序输出所有考生的准考证号、排名、考场号以及考场内排名;

int main()
{
	int total = 0;//考场学生数
	int alltotal = 0;//学生总数
	int n;//考场数
	int k = 0;//学生数组号
	scanf("%d", &n);
	for (int i = 0; i < n; i++)
	{
		int temp = k;
		scanf("%d", &total);
		for (int j = 0; j < total; j++)
		{
			scanf("%lld%d", &stu[k].number, &stu[k].score);
			stu[k].num = i + 1;
			k++;
		}
		alltotal += total;
		sort(stu + temp, stu + temp + total + 1, cmp);
		stu[temp].rank0 = 1;
		for (int j = temp+1; j < total+temp; j++)
		{
			if (stu[j].score == stu[j - 1].score)
			{
				stu[j].rank0 = stu[j - 1].rank0;
			}
			else
			{
				stu[j].rank0 = j-temp + 1;
			}
		}
	}
	printf("%d\n", alltotal);
	sort(stu, stu + alltotal+1,cmp);
	stu[0].rank1 = 1;
	printf("%lld %d %d %d\n", stu[0].number, stu[0].rank1, stu[0].num, stu[0].rank0);
	for (int j = 1; j < alltotal; j++)
	{
		if (stu[j].score == stu[j - 1].score)
		{
			stu[j].rank1 = stu[j - 1].rank1;
		}
		else
		{
			stu[j].rank1 = j + 1;
		}
		printf("%lld %d %d %d\n", stu[j].number, stu[j].rank1, stu[j].num, stu[j].rank0);
	}
	return 0;
}

entrada:

2
5
8888001 95
8888005 100
8888003 95
8888002 77
8888004 85
4
8888013 65
8888011 25
8888014 100
8888012 85

exportación

2
5
8888001 95
8888005 100
8888003 95
8888002 77
8888004 85
4
8888013 65
8888011 25
8888014 100
8888012 85

Libro de texto Ejemplo de código:

#include <cstdio>
#include <vector>
#include <algorithm>
#include <string>
#include <iostream>
using namespace std;

struct student {
	char id[15];//准考证号
	int score;//分数
	int location_number;//考场号
	int location_rank;//考场内排名
}stu[100];

bool cmp(student a,student b) {
	if (a.score != b.score)
		return a.score > b.score;
	else
		return strcmp(a.id,b.id)<0;
}

//n个考场,给出各考场中考生的准考证号和分数,
//要求所有考生按分数从高到低排序,
//并按顺序输出所有考生的准考证号、排名、考场号以及考场内排名;

int main()
{
	int k, num = 0;//num为学生总数
	int n;//考场数
	scanf("%d", &n);
	for (int i = 0; i < n; i++)
	{
		scanf("%d", &k);//该考场内人数
		for (int j = 0; j < k; j++)
		{
			scanf("%s%d", &stu[num].id, &stu[num].score);
			stu[num].location_number = i ;
			num++;
		}
		sort(stu + num-k, stu + num, cmp);
		stu[num-k].location_rank = 1;
		for (int j = num-k+1; j < num; j++)
		{
			if (stu[j].score == stu[j - 1].score)
			{
				stu[j].location_rank = stu[j - 1].location_rank;
			}
			else
			{
				stu[j].location_rank = j-(num-k) + 1;
			}
		}
	}
	printf("%d\n", num);
	sort(stu, stu + num,cmp);
	int r = 1;
	for (int j = 0; j < num; j++)
	{
		if (j>0&&stu[j].score != stu[j - 1].score)
		{
			r = j + 1;
			//stu[j].rank1 = stu[j - 1].rank1;
		}
		printf("%s %d %d %d\n", stu[j].id, r, stu[j].location_number, stu[j].location_rank);
	}
	return 0;
}

Puede saber que:

  1. cmp función del diseño, cuando supo el número se establece en una matriz de caracteres, debe ser diseñado
    strcmp retorno (a.id, b.id) <0;
  2. El número total de estudiantes es cada vez mayor, el número de bits igual al inicio de cada sala de examen en tiempo real (esta vez haya terminado de introducir toda esta información del estudiante examen) menos el número total de estudiantes en la sala de examen, la última para el número total de estudiantes en este momento;
  3. Se utiliza el segundo método se describe clasificaciones anteriores, he usado antes es el primer método, el segundo método es claramente más concisa.

ejercicio

secuencia

Descripción Título
del número n de entradas y salidas de clasificación.
De entrada
de la primera línea de entrada comprende un número entero n (1 <= n <= 100). La siguiente línea comprende n enteros.
De salida
puede ser múltiples conjuntos de datos de prueba para cada conjunto de datos, los n enteros ordenados de salida, tiene un espacio detrás de cada número.
Cada conjunto de datos de prueba por línea.

#include <cstdio>
#include <vector>
#include <algorithm>
#include <string>
#include <iostream>
using namespace std;

int main()
{
	int n;
	int input[110];
	while (scanf("%d", &n)!=EOF)
	{
		for (int i = 0; i < n; i++)
		{
			scanf("%d", &input[i]);
		}
		sort(input, input + n);//这里到底要不要+1?
		for (int i = 0; i < n; i++)
		{
			printf("%d", input[i]);
			if (i != n)
			{
				printf(" ");
			}
		}
		printf("\n");
	}
	return 0;
}

Hay un problema,

	sort(input, input + n);

En el final o no 1 aquí?
No es una ventaja! Dado que la entrada puede ser como entrada + 0,
el poste como una entrada + (n-1) 1
de pedido especial

Descripción Título
introducir una serie de números enteros, en donde el número máximo de recogida, y el número restante de clase.
De entrada
de entrada de la primera fila comprende un número entero N, 1 <= N <= 1000, representativo del número de los datos de entrada.
La siguiente línea de N enteros.
De salida
puede ser múltiples conjuntos de datos de prueba para cada conjunto de datos,
una primera línea de salida un número entero que representa el valor máximo de N enteros, y el valor se retira de la matriz, el número de restante tipo.
La salida de la segunda ordenación de línea.

#include <cstdio>
#include <vector>
#include <algorithm>
#include <string>
#include <iostream>
using namespace std;

int main()
{
	int n;
	int input[1100];
	while (scanf("%d", &n)!=EOF)
	{
		for (int i = 0; i < n; i++)
		{
			scanf("%d", &input[i]);
		}
		if (n == 1)
		{
			printf("%d\n-1\n", input[0]);
		}
		else 
		{			
			sort(input, input + n);
			printf("%d\n", input[n - 1]);
			input[n - 1] = '\0';
			for (int i = 0; i < n - 1; i++)
			{
				printf("%d", input[i]);
				if (i < n-2)
				{
					printf(" ");
				}
			}
			printf("\n");
		}
	}
	return 0;
}

ordenar EXCEL

Título Descripción
Excel puede especificar la columna para ordenar por cualquiera de un grupo de registros. Ahora se escribe un programa para lograr una funcionalidad similar.
Para cada caso de prueba, una primera línea de salida "Caso i:", donde i es el número de prueba (a partir de 1). Entonces da salida a las filas de N en el resultado de la clasificación requerida, a saber: cuando C = 1, ordenadas en orden ascendente número de estudiante; cuando C = 2, de acuerdo con los nombres de no decreciente de pedido lexicográfico; cuando C = 3, el rendimiento de la prensa orden no descendente. Cuando el número de estudiantes con el mismo nombre o los mismos resultados, pulse su número de estudiante en orden ascendente.
Introduzca la
prueba de entrada contiene varios casos de prueba. Cada fila de la primera caso de prueba contiene dos enteros N (N <= 100.000) y C, donde N es el número de registros, C es el número de columna de la especificada tipo. Aquí son N líneas, cada una contiene un registro del estudiante. Cada registro del número de estudiante de escuela (6 dígitos, sin duplicado de número de estudiante de prueba), nombre (no más de ocho y no una cadena sin espacios), la puntuación (intervalo cerrado [1000] entero en ), separadas por un espacio entre cada elemento. Cuando N = 0 para leer, el todo del extremo de entrada, una salida que no corresponde resultados.
De salida
para cada caso de prueba, una primera línea de salida "Caso i:", donde i es el número de prueba (a partir de 1). Entonces da salida a las filas de N en el resultado de la clasificación requerida, a saber: cuando C = 1, ordenadas en orden ascendente número de estudiante; cuando C = 2, de acuerdo con los nombres de no decreciente de pedido lexicográfico; cuando C = 3, el rendimiento de la prensa orden no descendente. Cuando el número de estudiantes con el mismo nombre o los mismos resultados, pulse su número de estudiante en orden ascendente.

#include <cstdio>
#include <vector>
#include <algorithm>
#include <string>
#include <cstring>
#include <iostream>
using namespace std;

struct student {
	char id[10];
	char name[10];
	int score;
}stu[100010];

bool cmp1(student a, student b)
{
	return strcmp(a.id, b.id)<0;
}

bool cmp2(student a, student b)
{
	if (!strcmp(a.name, b.name))
		return strcmp(a.id, b.id) < 0;
	else
		return strcmp(a.name, b.name) < 0;
}

bool cmp3(student a, student b)
{
	if (a.score != b.score)
		return a.score<b.score;
	else
		return strcmp(a.id, b.id)<0;
}

int main()
{
	int n,c;
	int nn = 1;
	while (scanf("%d%d", &n, &c), n)
	{
		for (int i = 0; i < n; i++)
		{
			scanf("%s%s%d", stu[i].id, stu[i].name, &stu[i].score);
		}
		switch (c)
		{
		case 1:
		{
			//sort(stu->id, (stu + n)->id);//结构体比较能不能这样偷懒?答:做梦。
			sort(stu, stu + n, cmp1);
			break;
		}
		case 2:
		{
			sort(stu, stu + n, cmp2);
			break;
		}
		case 3:
		{
			sort(stu, stu + n, cmp3);
			break;
		}
		default:
			break;
		}
		printf("Case %d:\n",nn);
		for (int i = 0; i < n; i++)
		{
			printf("%s %s %d\n", stu[i].id, stu[i].name, stu[i].score);
		}
		nn++;
	}
	return 0;
}

caso 1:
{
// sort (estu-> ID, (STU + n) -> id); //La comparación de la estructura no puede ser tan perezoso? Respuesta: soñando.
sort (Stu, Stu + n, CMP1);
descanso;
}

Clasificar dentro de una cadena

Descripción Título
introduzca una cadena de 200 o menos, entonces la cadena de caracteres de salida se ordena en orden ascendente.
De entrada
de datos de ensayo una pluralidad de conjuntos, la cadena de entrada.
De salida
para cada conjunto de entrada, salida el resultado procesado.

#include <cstdio>
#include <vector>
#include <algorithm>
#include <string>
#include <cstring>
#include <iostream>
using namespace std;
int main()
{
	char str[210];
	int len;
	while (fgets(str, 210, stdin) != NULL)
	{
		len = strlen(str);
		sort(str, str + len-1);
		str[len-1] = '\0';
		puts(str);
	}
	return 0;
}

Debido a que el formato ha sido el problema no puede AC (no está claro desde el título), ya no se enreda problema.
problema B

Título Descripción
escribir un programa que, por un M filas y m columnas (1 <m <10) es cuadrada, cada uno buscando la fila y cada columna de elementos de la diagonal principal y, por último secuencialmente en orden descendente salida.
Entrada
conjunto común de datos, el primero de entrada actúa un número entero positivo, m representa, la siguiente línea m, m representa un número entero de elementos de matriz de cada fila.
Salida
descendente disposición de conducción de número entero, cada número entero seguido de un espacio, la última envoltura.

#include <cstdio>
#include <vector>
#include <algorithm>
#include <string>
#include <cstring>
#include <iostream>
using namespace std;

bool cmp(int a, int b)
{
	return a > b;
}

int main()
{
	int num[10][10];
	int m;
	int sum[22];
	while (scanf("%d", &m) != EOF)
	{
		int sumi[10] = {}, sumj[10] = {}, sumx[2] = {};
		for (int i = 0; i < m; i++)
		{
			for (int j = 0; j < m; j++)
			{
				scanf("%d", &num[i][j]);
				sumi[i] += num[i][j];
				//if (j == m-1)
				//	getchar();
			}
		}
		for (int j = 0; j < m; j++)
		{
			for (int i = 0; i < m; i++)
				sumj[j] += num[i][j];
		}
		for (int x = 0; x < m; x++)
		{
			sumx[0] += num[x][x];
			sumx[1] += num[x][m - x - 1];
		}
		int p = 0;
		for (int i = 0; i < m; i++)
		{
			sum[p] = sumi[i];
			p++;
		}
		for (int j = 0; j < m; j++)
		{
			sum[p] = sumj[j];
			p++;
		}
		for (int x = 0; x < 2; x++)
		{
			sum[p] = sumx[x];
			p++;
		}
		sort(sum, sum + 2 * m + 2, cmp);
		for (int p = 0; p < 2 * m + 2; p++)
		{
			printf("%d", sum[p]);
			if (p != 2 * m + 1)
				printf(" ");
		}
		printf("\n");
	}
	return 0;
}

cola de los ratones

Descripción Título
N ratones blancos (1 <= N <= 100 ), cada cabeza de rata era un sombrero de color. Ahora las ratas pesaban cada color de salida requerida del mismo orden descendente sombrero cabeza de acuerdo con el peso de las ratas. color del sombrero está representado por "rojo", "azul" y otras cadenas. Diferentes ratones pueden llevar el mismo color del sombrero. El peso de los ratones como un entero.
Entrada
caso de múltiples entradas, la entrada de cada caso llevar a cabo un primer número entero N, el número de ratones.
Aquí hay N filas, cada fila es una información albino ratas. El primero es un número entero positivo de no más de 100, representa el peso de las ratas ,; la segunda cadena, que representa el color de las ratas del sombrero, una cadena de no más de 10 caracteres.
Nota: El peso de las ratas varió.
Salida de
cada tapa de color de salida caso de acuerdo con el peso de los ratones de orden ratones descendente.

#include <cstdio>
#include <vector>
#include <algorithm>
#include <string>
#include <cstring>
#include <iostream>
using namespace std;

struct mouse {
	int weight;
	char color[15];
}mou[110];

bool cmp(mouse a, mouse b)
{
	return a.weight > b.weight;
}

int main()
{
	int N;

	while (scanf("%d", &N) != EOF)
	{
		for (int i = 0; i < N; i++)
		{
			scanf("%d %s", &mou[i].weight, mou[i].color);//这里可不可以没有空格?
		}
		sort(mou, mou + N, cmp);
		for (int i = 0; i < N; i++)
		{
			printf("%s\n", mou[i].color);
		}
	}
	return 0;
}

for (int i = 0; i <N; i ++)
{
scanf ( "% d% s", y mou [i] .Weight, mou [i] .color);// No se puede tener un espacio aquí? R: Sí.
}

mediana

Título Descripción
mediana definir:. Un conjunto de datos en el orden de la disposición ascendente, en un número de (o promedio más dos datos intermedios) de la posición intermedia
Dado un conjunto de números enteros aleatorios, se obtiene la mediana número, si la requerida promedio de los dos números entre los más, puede ser redondeado hacia abajo (sin usar de punto flotante)
de entrada
para el programa de prueba comprende una pluralidad de conjuntos de datos, cada conjunto de la primera fila de datos de prueba N, el representante de la serie de prueba el número de datos incluido, 1 <= N <= 10.000 .
continuación, los datos de entrada de N conductual N, N 0 = final de la entrada
de salida de
bits de salida, cada conjunto de línea de salida de datos de prueba

#include <cstdio>
#include <vector>
#include <algorithm>
#include <string>
#include <cstring>
#include <iostream>
using namespace std;

int main()
{
	int n;
	int	num[10010];
	int temp;
	while (scanf("%d", &n), n)
	{
		for (int i = 0; i < n; i++)
		{
			scanf("%d", &num[i]);
		}
		sort(num, num + n);
		if (n % 2)
			printf("%d\n", num[(n - 1) / 2]);
		else
		{
			temp = (num[n / 2] + num[n / 2 - 1])/2 ;
			printf("%d\n", temp);
		}
	}
}

Entero especie de paridad

Descripción Título
entero de entrada 10, separados unos de otros por espacios. Reordenación de una salida (separados por espacios) después de requisitos:
1. La primera salida de números impares, pulse en orden descendente;
2 y en el que el orden incluso y pulse ascendente.
Introduzca
cualquier tipo de 10 números enteros (0 a 100), separados unos de otros por espacios.
De salida
puede ser múltiples conjuntos de datos de prueba para cada conjunto de datos, de conformidad con los requisitos de la salida ordenada, separadas por un espacio.
Consejos
varios conjuntos de datos, prestar atención al formato de salida
1. Los datos de prueba pueden ser muchos grupos, uso, mientras que (cin >> a [0] >> a [1] >> ... >> a [9]) enfoque similar para lograr;
2. Los datos de entrada al azar, posiblemente iguales.

#include <cstdio>
#include <vector>
#include <algorithm>
#include <string>
#include <cstring>
#include <iostream>
using namespace std;

bool cmp(int a, int b)
{
	return a > b;
}

int main()
{
	int a[10];//10还是11?
	int a0[10], a1[10];
	while (cin>> a[0] >> a[1] >> a[2] >> a[3] >> a[4] >> a[5] >> a[6] >> a[7] >> a[8] >> a[9])
	{
		int p = 0, q = 0;
		for (int i = 0; i < 10; i++)
		{
			if (a[i] % 2)
			{
				a1[p] = a[i];
				p++;
			}
			else
			{
				a0[q] = a[i];
				q++;
			}
		}
		sort(a1, a1 + p, cmp);
		sort(a0, a0 + q);
		for (int i = 0; i < p; i++)
			printf("%d ", a1[i]);
		for (int i = 0; i < q; i++)
		{
			printf("%d", a0[i]);
			if (i != q - 1)
				printf(" ");
		}
		printf("\n");
	}
	return 0;
}

** ** Clasificación

Título Descripción
examen de hoy sobre si bien existen en tiempo real rangoLista, pero sólo la parte superior clasifican de acuerdo al número de temas para ordenar completado, sin tener en cuenta la puntuación de cada pregunta, que no es la clasificación final. Dada la admisión, se escribe un programa para encontrar la puntuación final de los candidatos y su rendimiento de impresión en orden descendente.
Entrada de
campo de entrada de prueba contiene información sobre una serie de exámenes. Examen primera línea de información por campo da el número de candidatos N (0 <n <1000) , número de exámenes M (0 <m <= 10 ), la línea de corte (número entero positivo) G; la segunda línea se da sorting a la primera pregunta valor positivo número entero de m cuestión; las N filas, cada fila se le da un número de ticket de candidatos (la longitud de cadena no exceda de 20), el número total m de resolución de tema, título, y número de preguntas que m (número de sujetos de 1 a M).
Cuando el número de candidatos lee como 0, el extremo de entrada de no el examen de ser procesada.
De salida
para cada ensayo, el número de candidatos en la primera fila de la primera línea de la salida fraccional de no menos de n, entonces n fila por la puntuación en descendente de salida sobre el número candidato línea de rayado candidatos, separadas por un espacio entre ellos. Durante el mismo como si las puntuaciones de los candidatos, la producción en orden ascendente de su número de candidatos.

#include <cstdio>
#include <vector>
#include <algorithm>
#include <string>
#include <cstring>
#include <iostream>
using namespace std;

struct student {
	char id[25];
	int n;
	int m[10];
	int score=0;//是不是这样初始化的?
}stu[1010];

bool cmp(student a, student b)
{
	if (a.score == b.score)
		return a.id < b.id;
	else
		return a.score > b.score;
}

int main()
{
	int N, M, G;
	int value[10] = {};
	int sum=0;
	student output[1000];
	while (scanf("%d%d%d", &N, &M, &G), N)
	{
		for (int i = 0; i < M; i++)
		{
			scanf("%d", &value[i]);
		}
		for (int i = 0; i < N; i++)
		{
			scanf("%s%d", stu[i].id,&stu[i].n);
			for (int j = 0; j < stu[i].n; j++)
			{
				scanf("%d", &stu[i].m[j]);
				stu[i].score += value[stu[i].m[j]-1];
			}
		}
		for (int i = 0; i < N; i++)
		{
			if (stu[i].score >= G)
			{
				output[sum] = stu[i];//能不能直接复制?
				sum++;
			}
		}
		sort(output, output + sum, cmp);
		printf("%d\n", sum);
		for (int i = 0; i < sum; i++)
		{
			printf("%s %d\n", output[i].id, output[i].score);
		}
	}
	return 0;
}
Publicado 43 artículos originales · ganado elogios 4 · Vistas 1219

Supongo que te gusta

Origin blog.csdn.net/weixin_42176221/article/details/100998916
Recomendado
Clasificación