分析题目:
1.输入
此题要输入的东西还是蛮多的,用一堆数组会搞混,所以,我们可以使用结构体!
知识PS:什么是结构体???
结构体就是用一个数组储存多个数据,比较清晰。
结构体的格式:
struct 名称
{
数据类型 变量名
}数组名[数组范围];
给个示范:
struct cmd
{
string s;
int qi,ping,lun;
char gan,xi;
}a[10005];
怎么输入,提取呢??? 平常咱们用一维数组时,是这样提取的:数组名[数组下标]
结构体数组提取方法:数组名[数组下标].变量名;
还不懂???给个“栗子”你看
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i].s>>a[i].qi>>a[i].ping>>a[i].gan>>a[i].xi>>a[i].lun;
懂了么???
敲黑板:重点来了!
结构体数组一定要用自定义排序!
知识PS结束
2.计算奖学金
奖学金条件:
院士奖学金,每人8000元,期末平均成绩高于80分(>80),并且在本学期内发表1篇或1篇以上论文的学生均可获得;
五四奖学金,每人4000元,期末平均成绩高于85分(>85),并且班级评议成绩高于80分(>80)的学生均可获得;
成绩优秀奖,每人2000元,期末平均成绩高于90分(>90)的学生均可获得;
西部奖学金,每人1000元,期末平均成绩高于85分(>85)的西部省份学生均可获得;
班级贡献奖,每人850元,班级评议成绩高于80分(>80)的学生干部均可获得;
方便理解,我们用s代表名字,qi代表期末平均成绩,ping代表班级评议成绩,lun代表发表的论文数,gan代表是不是干部,xi代表是不是西部学生。
转化一下,可以得到以下代码;
sum=0;
if(a[i].qi>80 && a[i].lun>0) sum+=8000;
if(a[i].qi>85 && a[i].ping>80) sum+=4000;
if(a[i].qi>90) sum+=2000;
if(a[i].qi>85 && a[i].xi=='Y') sum+=1000;
if(a[i].ping>80 && a[i].gan=='Y') sum+=850;
最后发代码:
include[HTML_REMOVED]
using namespace std;
struct cmd
{
string s;
int qi,ping,lun;
char gan,xi;
}a[10005];
int n,sum,maxx=-10000,sum2;//n是有几个学生,sum是当前学生的奖学金,maxx是拥有奖学金最多的人的奖学金,sum2是一共有多少奖学金
string s2;//“学校首富”的名字
int main()
{
cin>>n;
for(int i=1;i<=n;i)
cin>>a[i].s>>a[i].qi>>a[i].ping>>a[i].gan>>a[i].xi>>a[i].lun;//输入
sum2=0;//清零
for(int i=1;i<=n;i)
{
sum=0;//清零
if(a[i].qi>80 && a[i].lun>0) sum+=8000;//院士奖学金
if(a[i].qi>85 && a[i].ping>80) sum+=4000;//五四奖学金
if(a[i].qi>90) sum+=2000;//成绩优秀奖
if(a[i].qi>85 && a[i].xi==’Y’) sum+=1000;//西部奖学金
if(a[i].ping>80 && a[i].gan==’Y’) sum+=850;//班级贡献奖
sum2+=sum;//累加
if(sum>maxx) {maxx=sum;s2=a[i].s;}//打擂台
}
cout<<s2<<endl<<maxx<<endl<<sum2;//输出
return 0;
}
安全无注释版
include[HTML_REMOVED]
using namespace std;
struct cmd
{
string s;
int qi,ping,lun;
char gan,xi;
}a[10005];
int n,sum,maxx=-10000,sum2;
string s2;
int main()
{
cin>>n;
for(int i=1;i<=n;i)
cin>>a[i].s>>a[i].qi>>a[i].ping>>a[i].gan>>a[i].xi>>a[i].lun;
sum2=0;
for(int i=1;i<=n;i)
{
sum=0;
if(a[i].qi>80 && a[i].lun>0) sum+=8000;
if(a[i].qi>85 && a[i].ping>80) sum+=4000;
if(a[i].qi>90) sum+=2000;
if(a[i].qi>85 && a[i].xi==’Y’) sum+=1000;
if(a[i].ping>80 && a[i].gan==’Y’) sum+=850;
sum2+=sum;
if(sum>maxx) {maxx=sum;s2=a[i].s;}
}
cout<<s2<<endl<<maxx<<endl<<sum2;
return 0;
}