简单的结构体排序而已,不多说了
#include <iostream> #include <algorithm> #include <stdio.h> using namespace std; struct personRedPackage //这是一个类,在类内声明 { static int Count; int id; double money; int redPackageNumber; personRedPackage() { id = Count++; money = 0; redPackageNumber=0; } }; int personRedPackage::Count = 0; bool compare(personRedPackage a, personRedPackage b) { if(a.money != b.money) return a.money > b.money? true:false; else if(a.redPackageNumber!=b.redPackageNumber) return a.redPackageNumber > b.redPackageNumber? true:false; else return a.id < b.id? true:false; } int main() { int n; cin >> n; int temp, id, money, allocateRedpackage=0; //record the number of red package issued personRedPackage grabRedPackage[n+2]; //本来应该是n+1,但编号从1到n for(int i=0; i<n; i++) { cin >> temp; for(int j=0; j<temp; j++) { cin >> id >> money; allocateRedpackage += money; grabRedPackage[id].money += money; grabRedPackage[id].id = id; grabRedPackage[id].redPackageNumber++; } grabRedPackage[i+1].money -= allocateRedpackage; allocateRedpackage = 0; } sort(grabRedPackage+1, grabRedPackage+n+1, compare); for(int i=1; i<n+1; i++) { printf("%d %0.2lf\n", grabRedPackage[i].id, grabRedPackage[i].money/100); } //cout << "Hello world!" << endl; return 0; }