ccf 201503-2 Dados n números enteros, cuente el número de apariciones de cada entero y la salida en orden descendente del número de apariciones

ccf 201503-2 Dados n números enteros, cuente el número de apariciones de cada entero y genere en orden descendente el número de apariciones

ccf 201503-2

tema

Tema:
Descripción del problema
  Dados n números enteros, cuente el número de apariciones de cada entero y expórtelos en orden de número de apariciones.
Formato de entrada
  La primera línea de entrada contiene un número entero n, que representa el número de números dados.
  La segunda línea contiene n números enteros y los números enteros adyacentes están separados por un espacio para indicar el número entero dado.
El formato de salida
  genera varias líneas, cada línea contiene dos números enteros, que representan respectivamente un número entero dado y el número de veces que aparece. Salida en orden descendente de aparición. Si dos números enteros aparecen el mismo número de veces, primero se emite el valor más pequeño y luego se emite el valor más grande.
Entrada de muestra
12
5 2 3 3 1 3 4 2 5 2 3 5
Salida de muestra
3 4
2 3
5 3
1 1
4 1
Escala y convención del caso de uso de evaluación
  1 ≤ n ≤ 1000, el número dado no es más de 1000 Entero no negativo.

Código:

Escrito de acuerdo con mi propio entendimiento, método relativamente estúpido, puntaje 80

#include<stdio.h>
int main()
{
	int n;
	scanf("%d",&n);
	int a[n] = {0};
	int b[n];
	for(int i=0;i<n;i++) 
		b[i] = 1;
	for(int i=0;i<n;i++)
		scanf("%d",&a[i]);
	
	for(int l=0;l<n-1;l++) 
		for(int i=0;i<n-1-l;i++)
		{
			if(a[i]>a[i+1])
			{
				int temp;
				temp = a[i+1];
				a[i+1] = a[i];
				a[i] = temp;
			}
		}			
	for(int i=0;i<n-1;i++)
	{
		for(int j=i+1;j<n;j++)
		{
			if(a[i] == a[j])
				b[i] += 1;
			
		}
		
	}
	
	for(int i=0;i<n;i++)
		printf("%d ",a[i]);
	printf("\n");
	for(int i=0;i<n;i++)
		printf("%d ",b[i]);
	printf("\n");
	
	int j = 0;
	int max = 0;
	int bian[n] = {0};	
	for(int p=0;p<n;p++)
	{
		if(bian[p] == 1)
		{
			continue;
		}
		for(int i=0;i<n;i++)
		{
			if(bian[p] == 1)
				continue;
			if(b[i]>max && bian[i] == 0)
			{
				max = b[i];
				j = i;
			}
			if(i == n-1)
			{
				
				printf("%d %d\n",a[j],max);
				max = 0;
				for(int k=0;k<n;k++)
					if(a[k] == a[j])
						bian[k] = 1;
			}
			
		}	
	}
	
	return 0;
}

Continúe mejorando el código después.

Supongo que te gusta

Origin blog.csdn.net/qq_41018465/article/details/109231901
Recomendado
Clasificación