515 条题解
-
0
q396748207 LV 5 @ 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分?求解。
-
02013-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分?求解。
-
02013-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;
} -
02013-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. -
02013-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;
} -
02013-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;
} -
02013-08-31 14:03:13@
-
02013-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.
求大神纠错,谢啦 -
02013-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. -
02013-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. -
02013-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;
} -
02013-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;
} -
02013-07-28 20:38:10@
-
02013-07-13 10:57:07@
【PYTHON】第一次提交Wrong Answer,第二次把 n=input(int) 改成 n=int(raw_input()) 就过了。
这是怎么回事啊。。 -
02013-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;
} -
02013-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 850struct 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;
} -
02013-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;
} -
02013-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;
谢谢观看,欢迎提出意见。 -
02013-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;
}###谢谢观看,欢迎提出意见。
-
02013-01-31 20:53:51@