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.