求noip2007普及组复赛试题及答案

www.zhiqu.org     时间: 2024-06-01
第一题
program scholar(input,output);
var a,b,c,id,s:array[1..300]of integer;v:array[0..0]of boolean;
i,j,k,t,m,n,x,y:integer;
begin
assign(input,'scholar.in');
assign(output,'scholar.out');
reset(input);rewrite(output);
readln(n);
for i:=1 to n do
begin readln(a[i],b[i],c[i]);id[i]:=i;end;
for i:=1 to n do
s[i]:=a[i]+b[i]+c[i];
for i:=1 to n-1 do
for j:=i to n do
begin
if s[i]<s[j]then
begin
t:=s[i];s[i]:=s[j];s[j]:=t;
t:=a[i];a[i]:=a[j];a[j]:=t;
t:=b[i];b[i]:=b[j];b[j]:=t;
t:=c[i];c[i]:=c[j];c[j]:=t;
t:=id[i];id[i]:=id[j];id[j]:=t;
end;
if s[i]=s[j]then
if a[i]<a[j] then
begin
t:=s[i];s[i]:=s[j];s[j]:=t;
t:=a[i];a[i]:=a[j];a[j]:=t;
t:=b[i];b[i]:=b[j];b[j]:=t;
t:=c[i];c[i]:=c[j];c[j]:=t;
t:=id[i];id[i]:=id[j];id[j]:=t;
end
end;
for i:=1 to 5 do
writeln(id[i],' ',a[i]+b[i]+c[i]);
close(input);close(output);
end.

第二题
program group(input,output);
var
s,i,w,n:integer;
a:array[1..30000] of integer;
procedure sort_quick(l,r:integer);
var i,j,x,y:integer;
begin

i:=l;j:=r;
x:=a[(l+r)div 2];
repeat
while a[i]<x do inc(i);
while x<a[j] do dec(j);
if i<=j then
begin y:=a[i];a[i]:=a[j];a[j]:=y;inc(i);dec(j); end;
until i>j;
if i<r then sort_quick(i,r);
if l<j then sort_quick(l,j);
end;
begin
assign(input,'group.in');
assign(output,'group.out');
reset(input);rewrite(output);
readln(w);readln(n);
for i:=1 to n do
readln(a[i]);
sort_quick(1,n);
i:=1;s:=0;
repeat
if a[i]+a[n]<=w then begin s:=s+1;inc(i);dec(n);end
else begin s:=s+1;dec(n);end;

until i>n;
writeln(s);
close(input);
close(output);
end.

第三题
还没做出来
第四题
program hanoi(input,output);
var n,i:integer;
s:string;
function twox(var ss:string):string;
var
i,j:integer;
sss:string;
begin
ss:='0'+ss;
sss:=ss;

i:=length(ss);
for j:=1 to i do
begin
if ss[j+1]>'4' then
case ss[j] of
'0','5':sss[j]:='1';
'1','6':sss[j]:='3';
'2','7':sss[j]:='5';
'3','8':sss[j]:='7';
'4','9':sss[j]:='9';
end;
if ss[j+1]<'5' then
case ss[j] of
'0','5':sss[j]:='0';
'1','6':sss[j]:='2';
'2','7':sss[j]:='4';
'3','8':sss[j]:='6';
'4','9':sss[j]:='8';
end;
end;
if sss[1]='0' then
begin
sss[1]:=' ';
delete(sss,1,1);
end;
twox:=sss;
end;

begin
assign(input,'hanoi.in');
assign(output,'hanoi.out');
reset(input);rewrite(output);
readln(n);
s:='1';
for i:=1 to n+1 do
s:=twox(s);
i:=length(s);
s[i]:=chr(ord(s[i])-2);

writeln(s);

close(input);close(output);
end.

第一题
program
scholar(input,output);
var
a,b,c,id,s:array[1..300]of
integer;v:array[0..0]of
boolean;
i,j,k,t,m,n,x,y:integer;
begin
assign(input,'scholar.in');
assign(output,'scholar.out');
reset(input);rewrite(output);
readln(n);
for
i:=1
to
n
do
begin
readln(a[i],b[i],c[i]);id[i]:=i;end;
for
i:=1
to
n
do
s[i]:=a[i]+b[i]+c[i];
for
i:=1
to
n-1
do
for
j:=i
to
n
do
begin
if
s[i]<s[j]then
begin
t:=s[i];s[i]:=s[j];s[j]:=t;
t:=a[i];a[i]:=a[j];a[j]:=t;
t:=b[i];b[i]:=b[j];b[j]:=t;
t:=c[i];c[i]:=c[j];c[j]:=t;
t:=id[i];id[i]:=id[j];id[j]:=t;
end;
if
s[i]=s[j]then
if
a[i]<a[j]
then
begin
t:=s[i];s[i]:=s[j];s[j]:=t;
t:=a[i];a[i]:=a[j];a[j]:=t;
t:=b[i];b[i]:=b[j];b[j]:=t;
t:=c[i];c[i]:=c[j];c[j]:=t;
t:=id[i];id[i]:=id[j];id[j]:=t;
end
end;
for
i:=1
to
5
do
writeln(id[i],'
',a[i]+b[i]+c[i]);
close(input);close(output);
end.
第二题
program
group(input,output);
var
s,i,w,n:integer;
a:array[1..30000]
of
integer;
procedure
sort_quick(l,r:integer);
var
i,j,x,y:integer;
begin
i:=l;j:=r;
x:=a[(l+r)div
2];
repeat
while
a[i]<x
do
inc(i);
while
x<a[j]
do
dec(j);
if
i<=j
then
begin
y:=a[i];a[i]:=a[j];a[j]:=y;inc(i);dec(j);
end;
until
i>j;
if
i<r
then
sort_quick(i,r);
if
l<j
then
sort_quick(l,j);
end;
begin
assign(input,'group.in');
assign(output,'group.out');
reset(input);rewrite(output);
readln(w);readln(n);
for
i:=1
to
n
do
readln(a[i]);
sort_quick(1,n);
i:=1;s:=0;
repeat
if
a[i]+a[n]<=w
then
begin
s:=s+1;inc(i);dec(n);end
else
begin
s:=s+1;dec(n);end;
until
i>n;
writeln(s);
close(input);
close(output);
end.
第三题
还没做出来
第四题
program
hanoi(input,output);
var
n,i:integer;
s:string;
function
twox(var
ss:string):string;
var
i,j:integer;
sss:string;
begin
ss:='0'+ss;
sss:=ss;
i:=length(ss);
for
j:=1
to
i
do
begin
if
ss[j+1]>'4'
then
case
ss[j]
of
'0','5':sss[j]:='1';
'1','6':sss[j]:='3';
'2','7':sss[j]:='5';
'3','8':sss[j]:='7';
'4','9':sss[j]:='9';
end;
if
ss[j+1]<'5'
then
case
ss[j]
of
'0','5':sss[j]:='0';
'1','6':sss[j]:='2';
'2','7':sss[j]:='4';
'3','8':sss[j]:='6';
'4','9':sss[j]:='8';
end;
end;
if
sss[1]='0'
then
begin
sss[1]:='
';
delete(sss,1,1);
end;
twox:=sss;
end;
begin
assign(input,'hanoi.in');
assign(output,'hanoi.out');
reset(input);rewrite(output);
readln(n);
s:='1';
for
i:=1
to
n+1
do
s:=twox(s);
i:=length(s);
s[i]:=chr(ord(s[i])-2);
writeln(s);
close(input);close(output);
end.

全国信息学奥林匹克联赛(NOIP2007)复赛普及组答案~

  第一题
  program scholar(input,output);
  var a,b,c,id,s:array[1..300]of integer;v:array[0..0]of boolean;
  i,j,k,t,m,n,x,y:integer;
  begin
  assign(input,'scholar.in');
  assign(output,'scholar.out');
  reset(input);rewrite(output);
  readln(n);
  for i:=1 to n do
  begin readln(a[i],b[i],c[i]);id[i]:=i;end;
  for i:=1 to n do
  s[i]:=a[i]+b[i]+c[i];
  for i:=1 to n-1 do
  for j:=i to n do
  begin
  if s[i]<s[j]then
  begin
  t:=s[i];s[i]:=s[j];s[j]:=t;
  t:=a[i];a[i]:=a[j];a[j]:=t;
  t:=b[i];b[i]:=b[j];b[j]:=t;
  t:=c[i];c[i]:=c[j];c[j]:=t;
  t:=id[i];id[i]:=id[j];id[j]:=t;
  end;
  if s[i]=s[j]then
  if a[i]<a[j] then
  begin
  t:=s[i];s[i]:=s[j];s[j]:=t;
  t:=a[i];a[i]:=a[j];a[j]:=t;
  t:=b[i];b[i]:=b[j];b[j]:=t;
  t:=c[i];c[i]:=c[j];c[j]:=t;
  t:=id[i];id[i]:=id[j];id[j]:=t;
  end
  end;
  for i:=1 to 5 do
  writeln(id[i],' ',a[i]+b[i]+c[i]);
  close(input);close(output);
  end.

  第二题
  program group(input,output);
  var
  s,i,w,n:integer;
  a:array[1..30000] of integer;
  procedure sort_quick(l,r:integer);
  var i,j,x,y:integer;
  begin

  i:=l;j:=r;
  x:=a[(l+r)div 2];
  repeat
  while a[i]<x do inc(i);
  while x<a[j] do dec(j);
  if i<=j then
  begin y:=a[i];a[i]:=a[j];a[j]:=y;inc(i);dec(j); end;
  until i>j;
  if i<r then sort_quick(i,r);
  if l<j then sort_quick(l,j);
  end;
  begin
  assign(input,'group.in');
  assign(output,'group.out');
  reset(input);rewrite(output);
  readln(w);readln(n);
  for i:=1 to n do
  readln(a[i]);
  sort_quick(1,n);
  i:=1;s:=0;
  repeat
  if a[i]+a[n]<=w then begin s:=s+1;inc(i);dec(n);end
  else begin s:=s+1;dec(n);end;

  until i>n;
  writeln(s);
  close(input);
  close(output);
  end.

NOIPnbsp;2007nbsp;普及组解题报告1.奖学金(scholar.pas/c/cpp)【问题描述】nbsp;nbsp;nbsp;nbsp;某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金。期末,每个学生都有3门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学排在前面,这样,每个学生的排序是唯一确定的。任务:先根据输入的3门课的成绩计算总分,然后按上述规则排序,最后按排名顺序输出前5名学生的学号和总分。注意,在前5名同学中,每个人的奖学金都不相同,因此,你必须严格按上述规则排序。例如,在某个正确答案中,如果前两行的输出数据(每行输出两个数:学号、总分)是:nbsp;nbsp;nbsp;nbsp;7nbsp;279nbsp;nbsp;nbsp;nbsp;5nbsp;279nbsp;nbsp;nbsp;nbsp;这两行数据的含义是:总分最高的两个同学的学号依次是7号、5号。这两名同学的总分都是279(总分等于输入的语文、数学、英语三科成绩之和),但学号为7的学生语文成绩更高一些。如果你的前两名的输出数据是:nbsp;nbsp;nbsp;nbsp;5nbsp;279nbsp;nbsp;nbsp;nbsp;7nbsp;279则按输出错误处理,不能得分。【输入】nbsp;nbsp;nbsp;nbsp;输入文件scholar.in包含行n+1行:nbsp;nbsp;nbsp;nbsp;第l行为一个正整数n,表示该校参加评选的学生人数。nbsp;nbsp;nbsp;nbsp;第2到年n+l行,每行有3个用空格隔开的数字,每个数字都在0到100之间。第j行的3个数字依次表示学号为j-1的学生的语文、数学、英语的成绩。每个学生的学号按照输入顺序编号为1~n(恰好是输入数据的行号减1)。所给的数据都是正确的,不必检验。【输出】nbsp;nbsp;nbsp;nbsp;输出文件scholar.out共有5行,每行是两个用空格隔开的正整数,依次表示前5名学生的学号和总分。nbsp;【输入输出样例l】scholar.innbsp;scholar.out690nbsp;67nbsp;8087nbsp;66nbsp;9178nbsp;89nbsp;9188nbsp;99nbsp;7767nbsp;89nbsp;6478nbsp;89nbsp;98nbsp;6nbsp;2654nbsp;2643nbsp;2582nbsp;2441nbsp;237【输入输出样例2】scholar.innbsp;scholar.out880nbsp;89nbsp;8988nbsp;98nbsp;7890nbsp;67nbsp;8087nbsp;66nbsp;9178nbsp;89nbsp;9188nbsp;99nbsp;7767nbsp;89nbsp;6478nbsp;89nbsp;98nbsp;8nbsp;2652nbsp;2646nbsp;2641nbsp;2585nbsp;258【限制】nbsp;nbsp;50%的数据满足:各学生的总成绩各不相同nbsp;nbsp;100%的数据满足:6amp;lt;=namp;lt;=300【试题分析】简单的排序。因为namp;lt;=300,所以选择排序不会超时。存储方面只需存储三个数:学好、语文成绩和总分。【参考程序】programnbsp;a1(input,output);varnbsp;nbsp;n,x,y,z,i,j:integer;nbsp;nbsp;a:array[1..300,1..3]nbsp;ofnbsp;integer;procedurenbsp;swap(varnbsp;a,b:integer);nbsp;nbsp;{交换过程}nbsp;nbsp;varnbsp;nbsp;nbsp;nbsp;s:integer;nbsp;nbsp;beginnbsp;nbsp;nbsp;nbsp;s:=a;nbsp;nbsp;nbsp;nbsp;a:=b;nbsp;nbsp;nbsp;nbsp;b:=s;nbsp;nbsp;end;beginnbsp;nbsp;assign(input,‘scholar.in‘);nbsp;nbsp;assign(output,‘scholar.out‘);nbsp;nbsp;reset(input);nbsp;nbsp;rewrite(output);nbsp;nbsp;readln(n);nbsp;nbsp;fornbsp;i:=1nbsp;tonbsp;nnbsp;donbsp;nbsp;nbsp;nbsp;beginnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;readln(x,y,z);nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;a[i,1]:=i;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;a[i,2]:=x;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;a[i,3]:=x+y+z;nbsp;nbsp;nbsp;nbsp;end;nbsp;nbsp;fornbsp;i:=1nbsp;tonbsp;n-1nbsp;donbsp;nbsp;{选择排序}nbsp;nbsp;nbsp;nbsp;fornbsp;j:=i+1nbsp;tonbsp;nnbsp;donbsp;nbsp;nbsp;nbsp;nbsp;nbsp;ifnbsp;(a[i,3]amp;lt;a[j,3])nbsp;ornbsp;((a[i,3]=a[j,3])nbsp;andnbsp;(a[i,2]amp;lt;a[j,2]))nbsp;ornbsp;((a[i,1]amp;gt;a[j,1])nbsp;andnbsp;(a[i,3]=a[j,3])nbsp;andnbsp;(a[i,2]=a[j,2]))nbsp;thennbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;beginnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;swap(a[i,1],a[j,1]); 查看原帖>>


#赵泽水# noip07 普及组第二题 纪念品分组
(18310535191): if(i == j ) { if(a[i]!=0) count++; break; }改成 if(i == j ) { while(a[i]>0) { a[i]=a[i]-2; count++; } break; }

#赵泽水# NOIP2007普及组初赛答案(C语言) -
(18310535191): NOIP2007年普及组(C语言)参考答案与评分标准 一、单项选择题:(每题1.5分) 1. D 2. D 3. C 4. B 5. B 6.B 7. B 8. C 9. C 10. A 11. C 12. A 13. A 14. A 15. B 16. D 17. C 18. D 19. A 20. A 二、问题求解:(每题 5分) 1.90 2.210 三、阅读...

#赵泽水# NOIP竞赛 普及组Pascal的复赛如何准备,第一第二题怎么拿分 -
(18310535191): 近几年的复赛题都比较简单,普及组前两题基本都是模拟算法.只要有扎实的功底,这些题都很容易拿分.1准备复赛可以做一下历年的复赛试题,并及时查缺补漏和总结.把近几年题目做熟也很利于第一二题拿分2做题时首先要弄清题意,如果...

#赵泽水# 求noip2008复赛普及组试题 -
(18310535191): 全国信息学奥林匹克联赛(NOIP2008)复赛普及组一.题目概览中文题目名称 ISBN号码 排座椅 传球游戏 立体图英文题目名称 isbn seat ball drawing可执行文件名 isbn seat ball drawing输入文件名 isbn.in seat.in ball.in drawing.in输出文件名 isbn....

#赵泽水# 谁能给我历届noip普及组复赛试卷
(18310535191): 可以的话给邮箱,我有95-11的电子文本

#赵泽水# 07年NOIP普及第3题,自己编的,不知道为什么死循环. -
(18310535191): 不是死循环,而是你的程序根本就不是从文件读入数据 要把var里面的input,output:text;删掉 不过程序还是有点问题的,建议去看看解题报告

#赵泽水# noip的题初赛和复赛的基本题型.
(18310535191): 初赛的笔试题有四部分:选择题、问题求解、程序阅读理解、完善程序. 1、选择题:共20题,每题1.5分,共30分.每题有4个备选方案. 2、问题求解:共2题,每题5分,共10分. 3、程序阅读理解题:共4题,每题8分,共32分. 4、完善程序:共 2题,第一题10分,第二题18分,两题共28分. 复赛为上机编程题,题目包括4道题,每题100分,共计400分.测试时,测试程序为每道题提供了5~10组测试数据,考生程序每答对一组得10~20 分;累计分即为该道题的得分.

#赵泽水# noip2007复赛提高组第一题答案 -
(18310535191): #include<stdio.h>#include<string.h>#define LEN 200000 int a[LEN],temp,mid; int sort(int *a,int low,int high) //一趟快排 { mid=a[low]; while (low<high) { while (low<high && a[high]>=mid) high--; temp=a[low];a[low]=a[high];a[high]=temp; while (low<high ...

#赵泽水# NOIP2007提高组复赛试题
(18310535191): 第一题:count 统计数字 输入一个数n(n&lt;=200000)和n个自然数(每个数都不超过1.5*10^9),请统计出这些自然数各自出现的次数,按顺序从小到大输出.输入数据保证不相同的数不超过10000个. 样例输入: 8 2 4 2 4 5 100 2 100 样例输...

#赵泽水# NOIP2007提高组复赛试题 -
(18310535191): 第一题:count 统计数字 输入一个数n(n<=200000)和n个自然数(每个数都不超过1.5*10^9),请统计出这些自然数各自出现的次数,按顺序从小到大输出.输入数据保证不相同的数不超过10000个.样例输入:8242451002100 样例输出:2 34 ...