题目描述
Oliver进入初中后,觉得自己不能总是玩儿了,应该要好好学习了。正好一次考试结束了,Oliver想知道自己的语文,数学,英语分别与语文年级第一,数学年级第一,英语年级第一相差多少。
由于Oliver所在年级有N个人,所以Oliver想你编个程序帮帮他。
输入
score.in共3N+4行,第一~三行分别为Oliver的语文数学英语成绩(位数M),第四行为N,以下3N行,每行一个数(它们的位数是M),分别为第N个同学的语文,数学,英语成绩。
即:Oliver的语文 数学 英语
N
第一个人的语文
数学
英语
第二个人的语文
…
输出
score.out共一行,有三个数,分别为Oliver的语文数学英语与年级第一的差。
如果Oliver是第一,则输出0.
样例输入
10
10
10
3
0
80
0
40
0
0
0
0
100
样例输出
30 70 90
【数据范围】
对于50%的数据,0< N < 1000,0< M <19.
对于100%的数据,0< N <10000,0< M <30.且都为整数。
分析
这一题的意思是说,给出三科成绩,分别与其他的N个人的成绩作比较,并输出 单科最高成绩 减Oliver单科成绩。值得注意的是,成绩的位数可能有M(0
type
arr=
array[-
10..
30]
of longint;
const
max=
30;
var
j,n,i:longint;
x1,x2,x3,zfc,c,z,y,x:ansistring;
procedure jian(s1,s2:ansistring);
var
a,b:arr;
l1,l2,i,g,j:longint;
beginfillchar(a,sizeof(a),
0);fillchar(b,sizeof(b),
0);l1:=length(s1);l2:=length(s2);
for i:=
1 to l1
doa[max-l1+i]:=ord(s1[i])-ord(
'0');
for i:=
1 to l2
dob[max-l2+i]:=ord(s2[i])-ord(
'0');g:=
0;
for i:=max
downto 1 doif a[i]>=b[i]+g
thenbegina[i]:=a[i]-b[i]-g;g:=
0;
end elsebegina[i]:=a[i]+
10-b[i]-g;g:=
1;
end;i:=
1;
while (i<max)
and(a[i]=
0)
do inc(i);
for j:=i
to max
dowrite(a[j]);
write(
' ');
end;
beginassign(input,
'score.in');reset(input);assign(output,
'score.out');rewrite(output);readln(x);zfc:=
'';
for i:=
1 to length(x)
doif x[i]<>
' ' then zfc:=zfc+x[i];x:=zfc;readln(y);zfc:=
'';
for i:=
1 to length(y)
doif y[i]<>
' ' then zfc:=zfc+y[i];y:=zfc;readln(z);zfc:=
'';
for i:=
1 to length(z)
doif z[i]<>
' ' then zfc:=zfc+z[i];z:=zfc;readln(n);x1:=
'';x2:=
'';x3:=
'';
for i:=
1 to n
dobeginreadln(c);zfc:=
'';
if length(c)>=length(x1)
thenbeginfor j:=
1 to length(c)
doif c[j]<>
' ' then zfc:=zfc+c[j];
if zfc>=x1
then x1:=zfc;
end;readln(c);zfc:=
'';
if length(c)>=length(x2)
thenbeginfor j:=
1 to length(c)
doif c[j]<>
' ' then zfc:=zfc+c[j];
if zfc>=x2
then x2:=zfc;
end;readln(c);zfc:=
'';
if length(c)>=length(x3)
thenbeginfor j:=
1 to length(c)
doif c[j]<>
' ' then zfc:=zfc+c[j];
if zfc>=x3
then x3:=zfc;
end;
end;
if x1=x
then write(
0,
' ')
else if (length(x1)<length(x))
then write(
0,
' ')
else if (x1>x)
or(length(x1)>=length(x))
then jian(x1,x);
if x2=y
then write(
0,
' ')
else if (length(x2)<length(y))
then write(
0,
' ')
else if (x2>y)
or(length(x2)>=length(y))
then jian(x2,y);
if x3=z
then write(
0,
' ')
else if (length(x3)<length(z))
then write(
0,
' ')
else if (x3>z)
or(length(x3)>=length(z))
then jian(x3,z);close(input);close(output);
end.
转载于:https://www.cnblogs.com/YYC-0304/p/9500089.html
总结
以上是生活随笔为你收集整理的JZOJ__Day 6:【普及模拟】Oliver的成绩(score)的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。