洛谷题解 P1051 【谁拿了最多奖学金】

    技术2025-11-20  2

    一看到题目,便知道要用结构体,保存学号,名字,期末平均成绩,班级评议成绩,是否是学生干部,是否是西部省份学生,以及发表的论文数。 再加上一个总钱数就ok了。 然后用结构体排序,个人喜欢用sort,所以要加algorithm头文件。

    #include <stdio.h> #include <iostream> #include <algorithm> using namespace std; struct stu { int id;//学号 char name[100];//名字 int qm,py; char gb,xb; int lw,jj; }a[110];//定义结构体数组 int jxj (int qm,int py,char gb,char xb,int lw) {//计算总钱数 int jj=0; if (qm>80&&lw>=1) jj+=8000; if (qm>85&&py>80) jj+=4000; if (qm>90) jj+=2000; if (qm>85&&xb=='Y') jj+=1000; if (py>80&&gb=='Y') jj+=850; return jj; } bool operator <(const stu &p1,const stu &p2) {//重载运算符 if (p1.jj!=p2.jj) return p1.jj<p2.jj; return p1.id>p2.id; } int main () { int n,i,zq=0; scanf ("%d",&n); for (i=0;i<n;i++) { scanf ("%s%d%d %c %c%d", a[i].name,&a[i].qm,&a[i].py,&a[i].gb,&a[i].xb,&a[i].lw);/读入 a[i].jj=jxj(a[i].qm,a[i].py,a[i].gb,a[i].xb,a[i].lw);//总钱数计算 a[i].id=i+1; zq+=a[i].jj; } sort (a,a+n);//排序 printf ("%s\n",a[i-1].name);//输出最大名字 printf ("%d\n",a[i-1].jj);//输出他的钱 printf ("%d",zq);//输出总钱数 return 0; }
    Processed: 0.015, SQL: 9