515 条题解

  • 0
    @ 2013-10-31 10:22:39

    #include <stdio.h>

    #define N 100

    int main(){
    char name[N][20],of[N],we[N];
    int i,n,fe[N],ca[N],ar[N],maxi,maxb,bo[N];
    long total;

    scanf("%d", &n);
    for (i=0; i<n; i++){
    scanf("%s %d %d %c %c %d", name[i], &fe[i], &ca[i],\
    &of[i], &we[i], &ar[i]);
    }
    total=0;
    maxi=0;
    maxb=0;
    for (i=0; i<n; i++){
    bo[i]=0;
    if ((fe[i]>80) && (ar[i]>=1)) bo[i]+=8000;
    if ((fe[i]>85) && (ca[i]>80)) bo[i]+=4000;
    if (fe[i]>90) bo[i]+=2000;
    if ((fe[i]>85) && (we[i]=='Y')) bo[i]+=1000;
    if ((ca[i]>80) && (of[i]=='Y')) bo[i]+=850;
    total+=bo[i];
    if (maxb<bo[i]) {
    maxb=bo[i];
    maxi=i;
    }
    }
    printf("%s\n%d\n%ld", name[maxi], bo[maxi], total);
    return 0;
    }

    为什么总是40分?求解。

  • 0
    @ 2013-10-31 10:22:29

    #include <stdio.h>

    #define N 100

    int main(){
    char name[N][20],of[N],we[N];
    int i,n,fe[N],ca[N],ar[N],maxi,maxb,bo[N];
    long total;

    scanf("%d", &n);
    for (i=0; i<n; i++){
    scanf("%s %d %d %c %c %d", name[i], &fe[i], &ca[i],\
    &of[i], &we[i], &ar[i]);
    }
    total=0;
    maxi=0;
    maxb=0;
    for (i=0; i<n; i++){
    bo[i]=0;
    if ((fe[i]>80) && (ar[i]>=1)) bo[i]+=8000;
    if ((fe[i]>85) && (ca[i]>80)) bo[i]+=4000;
    if (fe[i]>90) bo[i]+=2000;
    if ((fe[i]>85) && (we[i]=='Y')) bo[i]+=1000;
    if ((ca[i]>80) && (of[i]=='Y')) bo[i]+=850;
    total+=bo[i];
    if (maxb<bo[i]) {
    maxb=bo[i];
    maxi=i;
    }
    }
    printf("%s\n%d\n%ld", name[maxi], bo[maxi], total);
    return 0;
    }

    为什么总是40分?求解。

  • 0
    @ 2013-10-24 22:35:17

    为什么总是runtime error???

    #include<iostream>
    using namespace std;
    #include<stdio.h>
    int main(){
    char letter,name[22][101],namemax[21],text[3][101];
    int score[4][101],lunwen[101];
    int n,i,j,sum=0,max=0;
    cin>>n;
    for(i=1,j=1;i<=n;i++)
    {j=1;
    scanf("%c",letter);
    for(;letter!=' ';)
    {name[i][j++]=letter;
    scanf("%c",letter);}

    for(j=1;j<=2;j++)
    scanf("%d",&score[i][j++]);
    scanf("%d",&score[i][j]);
    scanf("%d",&lunwen[i]);
    if(score[i][1]>80&&lunwen[i]>0)score[i][3]+=8000;
    if(score[i][1]>85&&score[i][2]>80)score[i][3]+=4000;
    if(score[i][1]>90)score[i][3]+=2000;
    if(score[i][1]>85&&text[i][2]=='Y')score[i][3]+=1000;
    if(score[i][2]>80&&text[i][1]=='Y')score[i][3]+=850;
    sum+=score[i][3];
    if(score[i][3]>max)
    {max=score[i][3];
    for(j=1;j<=20;j++)
    namemax[j]=name[i][j];}
    }
    for(i=1;namemax[i];i++)
    printf("%c",namemax[i]);
    cout<<' '<<max<<sum;
    return 0;
    }

  • 0
    @ 2013-10-06 08:13:07

    第一次写RECORD类型。。。表示压力山大。
    主要是 CARDE 和 WEST 的输入比较坑爹 。
    以下是AC程序
    var i,j,k,l,n,m,ans1,max:longint;
    student:array[0..1000] of record
    name:string;
    score:longint;
    classes:longint;
    carde:string[2];
    west:string[2];
    article:longint;
    money:longint;
    end;
    c:char;
    ans:string;

    begin
    readln(n);
    for i:=1 to n do
    with student[i] do begin
    name:='';
    c:='a';
    while c<>' ' do begin
    read(c);
    if c<>' ' then name:=name+c;
    end;
    read(score);
    read(classes);
    read(carde);
    read(west);
    readln(article);
    if (score>80) and (article>=1) then money:=money+8000;
    if (score>85) and (classes>80) then money:=money+4000;
    if (score>90) then money:=money+2000;
    if (score>85) and (west=' Y') then money:=money+1000;
    if (classes>80) and (carde=' Y') then money:=money+850;
    if money>max then begin
    max:=money;
    ans:=name;
    end;
    ans1:=ans1+money;
    end;
    writeln(ans);
    writeln(max);
    writeln(ans1);
    end.

  • 0
    @ 2013-09-02 22:59:16

    来个纯 C 的...

    #include <stdio.h>
    #include <strings.h>

    struct stu_info
    {
    char name[20];
    int avg;
    int brownie;
    char is_representative;
    char is_from_west;
    int paper;
    };

    int calc_scholarship(struct stu_info si);

    int main()
    {
    struct stu_info si;
    int num, i = 0, scholarship, max_sch = 0, total = 0;
    char max_name[20];

    scanf(" %d", &num);

    for (; i < num; i++)
    {
    scanf(" %s %d %d %c %c %d", si.name, &si.avg, &si.brownie, &si.is_representative, &si.is_from_west, &si.paper);

    scholarship = calc_scholarship(si);
    total += scholarship;

    if (scholarship > max_sch)
    {
    max_sch = scholarship;
    strcpy(max_name, si.name);
    }
    }

    printf("%s\n%d\n%d", max_name, max_sch, total);

    return 0;
    }

    int calc_scholarship(struct stu_info si)
    {
    int scholarship = 0;

    if (si.avg > 80 && si.paper >= 1)
    scholarship += 8000;

    if (si.avg > 85 && si.brownie > 80)
    scholarship += 4000;

    if (si.avg > 90)
    scholarship += 2000;

    if (si.avg > 85 && si.is_from_west == 'Y')
    scholarship += 1000;

    if (si.brownie > 80 && si.is_representative == 'Y')
    scholarship += 850;

    return scholarship;
    }

  • 0
    @ 2013-08-31 16:57:15

    水题不多说。直接读入之后累加奖学金,然后找最大值即可。如果是PASCAL,那么读入可能会比较麻烦,C++可以直接用scanf读入。

    #include <cstdio>
    #include <cstring>

    struct student
    {
    char name[30],lead[3],west[3];
    int s1,s2,art;
    void cls()
    {
    memset(name,0,sizeof(name));
    memset(lead,0,sizeof(lead));
    memset(west,0,sizeof(west));
    s1=s2=art=0;
    }
    };

    student T;
    int max,tot,N,i,tmp;
    char ans[30];

    int main()
    {
    scanf("%d",&N);
    for (i=0;i<N;i++)
    {
    T.cls();
    tmp=0;
    scanf("%s%d%d%s%s%d",T.name,&T.s1,&T.s2,T.lead,T.west,&T.art);
    if (T.s1>80&&T.art>=1) tmp+=8000;
    if (T.s1>85&&T.s2>80) tmp+=4000;
    if (T.s1>90) tmp+=2000;
    if (T.s1>85&&T.west[0]=='Y') tmp+=1000;
    if (T.s2>80&&T.lead[0]=='Y') tmp+=850;
    if (tmp>max)
    {
    max=tmp;
    memset(ans,0,sizeof(ans));
    strcpy(ans,T.name);
    }
    tot+=tmp;
    }
    printf("%s\n%d\n%d\n",ans,max,tot);
    return 0;
    }

  • 0
    @ 2013-08-31 14:03:13
  • 0
    @ 2013-08-28 19:03:37

    var
    ans,max,total,x,y,z,n,i:longint;
    a,b,s,p:string;

    begin
    readln(n);
    total:=0;max:=0;
    for i:=1 to n do
    begin
    ans:=0;
    readln(s,x,y,a,b,z);

    if (x>=80) and (z>=1) then inc(ans,8000);
    if (x>=85) and (y>=80) then inc(ans,4000);
    if (x>=90) then inc(ans,2000);
    if (x>=85) and (a='Y') then inc(ans,1000);
    if (y>=80) and (b='Y') then inc(ans,850);

    inc(total,ans);

    if ans>max then begin
    p:=s;
    max:=ans;
    end;
    end;
    writeln(p);
    writeln(max);
    writeln(total);
    readln;
    end.
    求大神纠错,谢啦

    • @ 2013-08-31 16:59:03

      PASCAL如果readln一个字符串就会将整行读入,该题必须一个字符一个字符地读入。另外请善用调试功能

  • 0
    @ 2013-08-20 14:16:53

    通俗易懂
    var
    s:array[1..100]of string;
    qimo,banji,lunwen,jiangjin:array[1..100]of longint;
    ganbu,xibu:array[1..100]of char;
    i,j,n,max:longint;
    ch:char;
    na:string;
    sum:longint;
    begin
    readln(n);
    for i:=1 to n do
    begin
    read(ch);
    while ch<>' ' do
    begin
    s[i]:=s[i]+ch;
    read(ch);
    end;
    read(qimo[i],banji[i]);
    read(ch);
    read(ch);
    ganbu[i]:=ch;
    read(ch);
    read(ch);
    xibu[i]:=ch;
    readln(lunwen[i]);
    if (qimo[i]>80)and(lunwen[i]>=1) then inc(jiangjin[i],8000);
    if (qimo[i]>85)and(banji[i]>80) then inc(jiangjin[i],4000);
    if qimo[i]>90 then inc(jiangjin[i],2000);
    if (xibu[i]='Y')and(qimo[i]>85) then inc(jiangjin[i],1000);
    if (ganbu[i]='Y')and(banji[i]>80) then inc(jiangjin[i],850);
    inc(sum,jiangjin[i]);
    end;
    max:=jiangjin[1];
    for i:=1 to n do if max<jiangjin[i] then
    begin
    max:=jiangjin[i];
    na:=s[i];
    end;
    writeln(na);
    writeln(max);
    writeln(sum);
    end.

  • 0
    @ 2013-08-14 22:42:39

    各种小细节
    var a:array[1..5] of integer;
    n,i,j,k,max,m,mm:longint;
    nam,ss,s,nn:string;
    begin
    readln(n);
    for i:= 1 to n do begin
    m:=0;
    readln(s);
    s:=s+' ';
    k:=0;
    nam:='';
    for j:= 1 to length(s) do begin
    if copy(s,j,1)=' ' then begin
    if k<>0 then begin
    if ss='Y' then ss:='1';
    if ss='N' then ss:='0';
    val(ss,a[k]);
    k:=k+1;
    ss:='';
    end;

    if k=0 then begin
    nam:=ss;
    k:=1;
    ss:='';
    end;
    end;

    if copy(s,j,1)<>' ' then ss:=ss+copy(s,j,1);

    end;

    if (a[1]>80) and (a[5]>=1) then m:=m+8000;
    if (a[1]>85) and (a[2]>80) then m:=m+4000;
    if a[1]>90 then m:=m+2000;
    if (a[1]>85) and (a[4]=1) then m:=m+1000;
    if (a[2]>80) and (a[3]=1) then m:=m+850;
    if m>max then
    begin

    max:=m;
    nn:=nam;
    end;
    mm:=mm+m;
    end;
    writeln(nn);
    writeln(max);
    write(mm);
    end.

  • 0
    @ 2013-08-12 11:16:02

    #include<iostream>
    #include<string>
    using namespace std;
    int main()
    {
    int maxjj=-1,sumjj=0,jj,n;
    string maxjjn,jjn;
    int qmpjcj,bjpycj,fblws;
    char xsgb,xbsfxs;
    cin>>n;
    for(int i=0;i<n;i++)
    {
    cin>>jjn>>qmpjcj>>bjpycj>>xsgb>>xbsfxs>>fblws;
    jj=0;
    if(qmpjcj>80&&fblws>0)
    jj+=8000;
    if(qmpjcj>85&&bjpycj>80)
    jj+=4000;
    if(qmpjcj>90)
    jj+=2000;
    if(qmpjcj>85&&xbsfxs=='Y')
    jj+=1000;
    if(bjpycj>80&&xsgb=='Y')
    jj+=850;
    sumjj+=jj;
    if(jj>maxjj)
    maxjj=jj,maxjjn=jjn;
    }
    cout<<maxjjn<<endl<<maxjj<<endl<<sumjj<<endl;
    return 0;
    }

  • 0
    @ 2013-08-11 22:50:04

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    using namespace std;
    int main()
    {
    int n;
    int a,b,c,res=0,summ=0;
    char mname[11];
    char d,e;
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
    char name[11]="";
    int sum=0;
    scanf("%s %d %d %c %c %d",name,&a,&b,&d,&e,&c);
    if(a>80 && c>=1)
    sum+=8000;
    if(a>85 && b>80)
    sum+=4000;
    if(a>90)
    sum+=2000;
    if(a>85 && e=='Y')
    sum+=1000;
    if(b>80 && d=='Y')
    sum+=850;
    res+=sum;
    if(sum>summ)
    {
    for(int j=0;j<=strlen(mname);j++)
    mname[j]=0;
    for(int j=0;j<=strlen(name);j++)
    mname[j]=name[j];
    summ=sum;
    }
    }
    puts(mname);
    printf("%d\n%d",summ,res);
    return 0;
    }

  • 0
    @ 2013-07-13 10:57:07

    【PYTHON】第一次提交Wrong Answer,第二次把 n=input(int) 改成 n=int(raw_input()) 就过了。
    这是怎么回事啊。。

  • 0
    @ 2013-07-11 13:11:50

    定义一个类表示学生的基本资料:
    #include<iostream>
    using namespace std;
    class student
    {
    private:
    char name[21];
    int qm,bj,lw;
    bool gb,xb;
    public:
    void get()
    {
    cin>>name>>qm>>bj;
    char a,b;
    cin>>a>>b;
    if(a=='Y')
    gb=true;
    else
    gb=false;
    if(b=='Y')
    xb=true;
    else
    xb=false;
    cin>>lw;
    }
    int jj()
    {
    int ans=0;
    if(qm>80 && lw>=1)
    ans+=8000;
    if(qm>85 && bj>80)
    ans+=4000;
    if(qm>90)
    ans+=2000;
    if(qm>85 && xb)
    ans+=1000;
    if(bj>80 && gb)
    ans+=850;
    return ans;
    }
    void put()
    {
    cout<<name<<endl;
    }
    };
    int main()
    {
    int n,maxn=0,sum=0;
    student stu,mstu;
    cin>>n;
    for(int i=0;i<n;i++)
    {
    stu.get();
    int x=stu.jj();
    if(x>maxn)
    {
    maxn=x;
    mstu=stu;
    }
    sum+=x;
    }
    mstu.put();
    cout<<maxn<<endl
    <<sum<<endl;
    return 0;
    }

  • 0
    @ 2013-06-18 23:55:51

    注意__不能__在定义结构体程序段的内部给结构体变量赋初值,windos下只显示警告信息,linux下却会编译失败,另外可以尝试优化程序结构,减少判断次数。

    ####Block code
    #include <stdio.h>

    #define bonus_acade 8000
    #define bonus_54 4000
    #define bonus_grade 2000
    #define bonus_west 1000
    #define bonus_contr 850

    struct student
    {
    char name[21],iswest,islead;
    int fingra,totgra,numlit,bonusum;
    }infor[100];
    int main(void)
    {
    int N,i,groupbon=0,max=0,person;
    scanf("%d",&N);
    for(i=0;i<N;i++)
    {
    scanf("%s %d %d %c %c %d",&infor[i].name,&infor[i].fingra,
    &infor[i].totgra,&infor[i].islead,&infor[i].iswest,&infor[i].numlit);
    infor[i].bonusum=0;
    if(infor[i].fingra>80)
    {
    if(infor[i].numlit>=1)
    {
    infor[i].bonusum+=bonus_acade;
    groupbon+=bonus_acade;
    }
    if(infor[i].fingra>85 && infor[i].totgra>80)
    {
    infor[i].bonusum+=bonus_54;
    groupbon+=bonus_54;
    }
    if(infor[i].fingra>90)
    {
    infor[i].bonusum+=bonus_grade;
    groupbon+=bonus_grade;
    }
    if(infor[i].fingra>85 && infor[i].iswest=='Y')
    {
    infor[i].bonusum+=bonus_west;
    groupbon+=bonus_west;
    }
    }
    if(infor[i].totgra>80 && infor[i].islead=='Y')
    {
    infor[i].bonusum+=bonus_contr;
    groupbon+=bonus_contr;
    }
    }

    for(i=0;i<N;i++)
    if(infor[i].bonusum>max)
    {
    max=infor[i].bonusum;
    person=i;
    }
    printf("%s\n%d\n%d",infor[person].name,infor[person].bonusum,groupbon);
    return 0;
    }

  • 0
    @ 2013-05-11 12:24:45

    求纠错
    #include<iostream>
    using namespace std;
    int main() {
    int n;
    cin>>n;
    int i,j,qm[101],bj[101],lw[101],jj[101],max=0,k,tot;
    char gb[101],xb[101];
    string name[101];
    for(i=1;i<=n;i++) cin>>name[i]>>qm[i]>>bj[i]>>gb[i]>>xb[i]>>lw[i];
    for(i=1;i<=n;i++) {
    if(qm[i]>80&&lw[i]>=1) jj[i]+=8000;
    if(qm[i]>85&&bj[i]>80) jj[i]+=4000;
    if(qm[i]>90) jj[i]+=2000;
    if(qm[i]>85&&xb[i]=='Y') jj[i]+=1000;
    if(bj[i]>80&&gb[i]=='Y') jj[i]+=850;
    if(max<jj[i])
    {
    k=i;
    max=jj[i];
    }
    tot+=jj[i];
    }
    cout<<name[k]<<endl<<jj[k]<<endl<<tot;
    return 0;
    }

  • 0
    @ 2013-02-27 09:43:20

    P1001题解
    试题
      描述
      某校的惯例是在每学期的期末考试之后发放奖学金。发放的奖学金共有五种,获取的条件各自不同:
      1) 院士奖学金,每人8000元,期末平均成绩高于80分(>80),并且在本学期内发表1篇或1篇以上论文的学生均可获得;
      2) 五四奖学金,每人4000元,期末平均成绩高于85分(>85),并且班级评议成绩高于80分(>80)的学生均可获得;
      3) 成绩优秀奖,每人2000元,期末平均成绩高于90分(>90)的学生均可获得;
      4) 西部奖学金,每人1000元,期末平均成绩高于85分(>85)的西部省份学生均可获得;
      5) 班级贡献奖,每人850元,班级评议成绩高于80分(>80)的学生干部均可获得;
      只要符合条件就可以得奖,每项奖学金的获奖人数没有限制,每名学生也可以同时获得多项奖学金。例如姚林的期末平均成绩是87分,班级评议成绩82分,同时他还是一位学生干部,那么他可以同时获得五四奖学金和班级贡献奖,奖金总数是4850元。
      现在给出若干学生的相关数据,请计算哪些同学获得的奖金总数最高(假设总有同学能满足获得奖学金的条件)。
      格式
      输入格式
      输入的第一行是一个整数N(1 <= N <= 100),表示学生的总数。接下来的N行每行是一位学生的数据,从左向右依次是姓名,期末平均成绩,班级评议成绩,是否是学生干部,是否是西部省份学生,以及发表的论文数。姓名是由大小写英文字母组成的长度不超过20的字符串(不含空格);期末平均成绩和班级评议成绩都是0到100之间的整数(包括0和100);是否是学生干部和是否是西部省份学生分别用一个字符表示,Y表示是,N表示不是;发表的论文数是0到10的整数(包括0和10)。每两个相邻数据项之间用一个空格分隔。
      输出格式
      输出包括三行,第一行是获得最多奖金的学生的姓名,第二行是这名学生获得的奖金总数。如果有两位或两位以上的学生获得的奖金最多,输出他们之中在输入文件中出现最早的学生的姓名。第三行是这N个学生获得的奖学金的总数。
      样例
      样例输入
      4
      YaoLin 87 82 Y N 0
      ChenRuiyi 88 78 N Y 1
      LiXin 92 88 N N 0
      ZhangQin 83 87 Y N 1
      样例输出
      ChenRuiyi
      9000
      28700
      限制
      1s
    题解
      分析
      本题从题意分析是一道模拟题,从数据分析是一道小数据题。
      本题是一道条件复杂、做法简单的模拟题。
      因此本题主要考察选手的基本编程能力。
      本题做法较简单,可以直接简单模拟。
      具体做法
      1、数据初始化;
      2、循环3-6的操作直到处理完所有数据;
      3、输入一组数据;
      4、根据条件计算奖金值;
      5、累加奖金值;
      6、与最大值比较,并按情况覆盖;
      7、输出结果;
      代码
      #include<iostream>
      #include<string>
      using namespace std;
      int main()
      {
      //数据初始化
       int maxjj=-1,sumjj=0,jj=0,n;
       string maxjjn,jjn;
       int qmpjcj,bjpycj,fblws;
       char xsgb,xbsfxs;
       cin>>n;
      
      //循环操作直到处理完所有数据
       for(int i=0;i<n;i++,jj=0)
       {
      //输入一组数据
       cin>>jjn>>qmpjcj>>bjpycj>>xsgb>>xbsfxs>>fblws;
      //根据条件计算奖金值
       if(qmpjcj>80&&fblws>0)
       jj+=8000;
       if(qmpjcj>85&&bjpycj>80)
       jj+=4000;
       if(qmpjcj>90)
       jj+=2000;
       if(qmpjcj>85&&xbsfxs=='Y')
       jj+=1000;
       if(bjpycj>80&&xsgb=='Y')
       jj+=850;
      //累加奖金值
       sumjj+=jj;
      //与最大值比较,并按情况覆盖
       if(jj>maxjj)
       maxjj=jj,maxjjn=jjn;
       }
      //输出结果
       cout<<maxjjn<<endl<<maxjj<<endl<<sumjj<<endl;
       return 0;
      
    谢谢观看,欢迎提出意见。

  • 0
    @ 2013-02-22 20:36:36

    ###描述
    某校的惯例是在每学期的期末考试之后发放奖学金。发放的奖学金共有五种,获取的条件各自不同:
    1) 院士奖学金,每人8000元,期末平均成绩高于80分(>80),并且在本学期内发表1篇或1篇以上论文的学生均可获得;
    2) 五四奖学金,每人4000元,期末平均成绩高于85分(>85),并且班级评议成绩高于80分(>80)的学生均可获得;
    3) 成绩优秀奖,每人2000元,期末平均成绩高于90分(>90)的学生均可获得;
    4) 西部奖学金,每人1000元,期末平均成绩高于85分(>85)的西部省份学生均可获得;
    5) 班级贡献奖,每人850元,班级评议成绩高于80分(>80)的学生干部均可获得;
    只要符合条件就可以得奖,每项奖学金的获奖人数没有限制,每名学生也可以同时获得多项奖学金。例如姚林的期末平均成绩是87分,班级评议成绩82分,同时他还是一位学生干部,那么他可以同时获得五四奖学金和班级贡献奖,奖金总数是4850元。
    现在给出若干学生的相关数据,请计算哪些同学获得的奖金总数最高(假设总有同学能满足获得奖学金的条件)。
    ###格式
    输入格式
    输入的第一行是一个整数N(1 <= N <= 100),表示学生的总数。接下来的N行每行是一位学生的数据,从左向右依次是姓名,期末平均成绩,班级评议成绩,是否是学生干部,是否是西部省份学生,以及发表的论文数。姓名是由大小写英文字母组成的长度不超过20的字符串(不含空格);期末平均成绩和班级评议成绩都是0到100之间的整数(包括0和100);是否是学生干部和是否是西部省份学生分别用一个字符表示,Y表示是,N表示不是;发表的论文数是0到10的整数(包括0和10)。每两个相邻数据项之间用一个空格分隔。
    输出格式
    输出包括三行,第一行是获得最多奖金的学生的姓名,第二行是这名学生获得的奖金总数。如果有两位或两位以上的学生获得的奖金最多,输出他们之中在输入文件中出现最早的学生的姓名。第三行是这N个学生获得的奖学金的总数。
    ###样例
    样例输入
    4
    YaoLin 87 82 Y N 0
    ChenRuiyi 88 78 N Y 1
    LiXin 92 88 N N 0
    ZhangQin 83 87 Y N 1
    样例输出
    ChenRuiyi
    9000
    28700
    ###限制
    1s

    ###题解
    本题从题意分析是一道模拟题,从数据分析是一道小数据题。
    本题是一道条件复杂、做法简单的模拟题。
    因此本题主要考察选手的基本编程能力。
    本题做法较简单,可以直接简单模拟。

    具体做法:
    1、将最大值,累加和初始化,并输入数据组数;
    2、循环3-6的操作直到处理完所有数据;
    3、输入一组数据;
    4、根据条件计算奖金值;
    5、与最大值比较,并按情况覆盖;
    6、累加奖金值;
    7、输出结果;

    代码
    #include<iostream>
    #include<string>
    using namespace std;

    int main()
    {
    int maxjj=-1,sumjj=0,jj,n;
    string maxjjn,jjn;
    int qmpjcj,bjpycj,fblws;
    char xsgb,xbsfxs;
    cin>>n;
    for(int i=0;i<n;i++)
    {
    cin>>jjn>>qmpjcj>>bjpycj>>xsgb>>xbsfxs>>fblws;
    jj=0;
    if(qmpjcj>80&&fblws>0)
    jj+=8000;
    if(qmpjcj>85&&bjpycj>80)
    jj+=4000;
    if(qmpjcj>90)
    jj+=2000;
    if(qmpjcj>85&&xbsfxs=='Y')
    jj+=1000;
    if(bjpycj>80&&xsgb=='Y')
    jj+=850;
    sumjj+=jj;
    if(jj>maxjj)
    maxjj=jj,maxjjn=jjn;
    }
    cout<<maxjjn<<endl<<maxjj<<endl<<sumjj<<endl;
    return 0;
    }

    ###谢谢观看,欢迎提出意见。

信息

ID
1001
难度
5
分类
模拟 点击显示
标签
递交数
39443
已通过
12860
通过率
33%
被复制
144
上传者