518 条题解

  • 0
    @ 2013-12-01 21:41:01

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #define REP( i, n ) for ( int i = 1; i <= n; i ++ )
    #define FOR( i, a, b ) for ( int i = a; i <= b; i ++ )
    #define DWN( i, a, b ) for ( int i = b; i >= a; i -- )
    #define RST( a, x ) memset ( a, x, sizeof ( a ) );
    #define QN q[ i ].name
    #define QS1 q[ i ].scr1
    #define QS2 q[ i ].scr2
    #define QT q[ i ].stu
    #define QW q[ i ].west
    #define QP q[ i ].pap
    #define QZ q[ i ].prz
    #define QO q[ i ].pos
    #define TRUE == 'Y'
    #define NSIZE 102
    #define ONLINE_JUDGE NULL

    using namespace std;
    struct arr
    {
    char name[ 30 ], stu[ 3 ], west[ 3 ];
    int scr1, scr2, pap, prz, pos;
    };
    int n, ans = 0;
    arr q[ NSIZE ];
    bool cmp ( arr a, arr b )
    {
    if ( a.prz != b.prz ) return a.prz > b.prz;
    return a.pos < b.pos;
    }
    int main ()
    {

    #ifndef ONLINE_JUDGE
    freopen ( "P1001.in", "r", stdin );
    freopen ( "P1001.out", "w", stdout );
    #endif

    scanf ( "%d", &n );
    REP ( i, n )
    {
    scanf ( "%s%d%d%s%s%d", QN, &QS1, &QS2, QT, QW, &QP );
    QZ = 0; QO = i;
    if ( QS1 > 80 && QP ) QZ += 8000;
    if ( QS1 > 85 && QS2 > 80 ) QZ += 4000;
    if ( QS1 > 90 ) QZ += 2000;
    if ( QS1 > 85 && QW[ 0 ] TRUE ) QZ += 1000;
    if ( QS2 > 80 && QT[ 0 ] TRUE ) QZ += 850;
    ans += QZ;
    }
    sort ( q + 1, q + n + 1, cmp );
    printf ( "%s\n%d\n%d\n", q[ 1 ].name, q[ 1 ].prz, ans );
    return 0;
    }
    想不通以前怎么写的……

  • 0
    @ 2013-11-08 20:57:25

    var i,n,max,m,sum,a1,a2,b:longint;
    ch,kong,p1,p2:char;
    name,ans:string;
    begin
    readln(n);
    max:=0;
    for i:=1 to n do begin
    m:=0; name:='';
    while true do begin
    read(ch);
    if ch<>' ' then name:=name+ch else break;
    end;
    readln(a1,a2,kong,p1,kong,p2,b);
    if (a1>80)and(b>0) then m:=m+8000;
    if (a1>85)and(a2>80) then m:=m+4000;
    if a1>90 then m:=m+2000;
    if (a1>85)and(p2='Y') then m:=m+1000;
    if (a2>80)and(p1='Y') then m:=m+850;
    if m>max then begin
    max:=m;
    ans:=name;
    end;
    sum:=sum+m;
    end;
    writeln(ans);
    writeln(max);
    writeln(sum);
    end.

  • 0
    @ 2013-11-03 09:30:25

    program p1001;
    var name:array[0..100,0..20]of char;
    n:integer;
    qm,bp,lw:array[0..100]of integer;
    gb,xb:array[0..100]of boolean;
    jxj:array[0..100]of longint;
    num,max:longint;
    ////////////////////////////////////////////////////////////////////////////////
    procedure init;
    var ch:char;
    i,j,k:integer;
    begin
    for i:=0 to 100 do
    for j:=0 to 20 do
    name[i,j]:=' ';
    readln(n);
    for i:=1 to n do
    begin
    read(ch);
    k:=0;
    while ch<>' ' do
    begin
    inc(k);
    name[i,k]:=ch;
    read(ch);
    end;
    read(qm[i],bp[i]);
    read(ch);read(ch);
    if ch='Y' then gb[i]:=true
    else gb[i]:=false;
    read(ch);read(ch);
    if ch='Y' then xb[i]:=true
    else xb[i]:=false;
    readln(lw[i]);
    end;
    end;
    ////////////////////////////////////////////////////////////////////////////////
    procedure main;
    var nn,i:integer;
    begin
    num:=0;max:=0;
    fillchar(jxj,sizeof(jxj),0);
    for i:=1 to n do
    begin
    if (qm[i]>80)and(lw[i]>=1) then jxj[i]:=jxj[i]+8000;
    if (qm[i]>85)and(bp[i]>80) then jxj[i]:=jxj[i]+4000;
    if qm[i]>90 then jxj[i]:=jxj[i]+2000;
    if (qm[i]>85)and(xb[i]) then jxj[i]:=jxj[i]+1000;
    if (bp[i]>80)and(gb[i]) then jxj[i]:=jxj[i]+850;
    if (jxj[i]>max)or(max=0) then
    begin
    max:=jxj[i];
    nn:=i;
    end;
    num:=num+jxj[i];
    end;
    for i:=1 to 20 do
    begin
    if name[nn,i]<>' ' then write(name[nn,i]);
    end;
    writeln;
    writeln(max);
    writeln(num);
    end;
    ////////////////////////////////////////////////////////////////////////////////
    begin
    init;
    main;
    end.

  • 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;
    }

信息

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