Clasificación qsort en lenguaje C L2-009

Tema`

Nadie no ha agarrado sobres rojos, verdad ... Aquí hay un registro de N personas que se dieron sobres rojos entre sí y agarraron sobres rojos. Por favor, cuente sus ganancias al agarrar sobres rojos.

Formato de entrada:
ingrese la primera línea para dar un número entero positivo N (≤10 4 ^ 4), es decir, el número total de personas que participan en la distribución de sobres rojos y la captura de sobres rojos, luego estas personas se numeran del 1 al N . En las siguientes N líneas, la i-ésima línea da el registro del sobre rojo emitido por la persona numerada i, en el siguiente formato: KN 1 P 1… N K P K donde K (0≤K≤20) es el número de sobres rojos enviados, Ni es el número de la persona que toma el sobre rojo y Pi (> 0) es la cantidad de sobres rojos (en centavos). Nota: Para los sobres rojos emitidos por la misma persona, cada persona solo puede tomarlo una vez como máximo y no se puede repetir.

Formato de
salida : envíe el número de serie de cada persona y la cantidad de ingresos en orden descendente de la cantidad de ingresos (en yuanes, 2 decimales de salida). La información de cada persona está en una línea con un espacio entre los dos números. Si hay un empate en la cantidad de ingresos, se emitirá en orden descendente según el número de sobres rojos tomados; si hay un empate, se emitirá en incrementos de acuerdo con el número individual.

Ejemplo de entrada:
10
3 2 22 10 58 8125
5 1345 3211 5233 7 13 8101
1 7 8800
2 1 1000 2 1000
2 4250 10320
6 5 11 9 22 8 33 7 44 10 55 4 2
1 3 8800
2 1 23 2 123
1 8 250
4 2 121 4 516 7 112 9 10
ejemplo de salida:
1 11,63
2 3,63
8 3,63
3 2,11
7 1,69
6 -1,67
9 -2,18
10 -3,26
5 -3,26
4 -12,32

La función qsort está incluida en <stdlib.h>
Uso

Código:

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

struct peo{
    
    
	int id;
	int fmoney;
	int smoney;
	double jieguo;
	int geshu;
};

int cmp(const void *a,const void *b){
    
    
	struct peo s1 = *(struct peo*)a;
	struct peo s2 = *(struct peo*)b;
	if(s1.jieguo<s2.jieguo){
    
    
		return 1;
	}else if(s1.jieguo==s2.jieguo){
    
    
		if(s1.geshu<s2.geshu){
    
    
			return 1;
		}else if(s1.geshu==s2.geshu){
    
    
			if(s1.id>s2.id){
    
    
				return 1;
			}else if(s1.id==s2.id){
    
    
				return 0;
			}else{
    
    
				return -1;
			}
		}else{
    
    
			return -1;
		}
	}else{
    
    
		return -1;
	}
}
int main(int argc, char *argv[]) {
    
    
	int i,j,n,m,a,b;
	scanf("%d",&n);
	struct peo p[10005] = {
    
    0};
	for(i=0;i<n;i++){
    
    
		scanf("%d",&m); //发的红包个数
		p[i].id = i+1;
		for(j=0;j<m;j++){
    
    
			scanf("%d%d",&a,&b); //a抢红包的人,b抢到的钱
			p[a-1].smoney += b;
			p[a-1].geshu++;
			p[i].fmoney += b;
		} 
	}
	for(i=0;i<n;i++){
    
    
		p[i].jieguo = p[i].smoney - p[i].fmoney;
	}
	qsort(p,n,sizeof(struct peo),cmp);
	//输出
	for(i=0;i<n;i++){
    
    
		printf("%d %.2lf\n",p[i].id,p[i].jieguo/100);
	} 
	return 0;
}

Supongo que te gusta

Origin blog.csdn.net/qq_45880043/article/details/108764474
Recomendado
Clasificación