求几道关于free pascal的编程题 上机运行题!

快啊!

我有95至07年的所有题目
把你的邮箱告诉我我就可以给你了
有8MB多一点

给各例子:
普及组

题目一览

题目名称 奖学金 纪念品分组 守望者的逃离 Hanoi双塔问题
代号 scholar group escape hanoi
输入文件 scholar.in group.in escape.in hanoi.in
输出文件 scholar.out group.out escape.out hanoi.out
时限 1秒 1秒 1秒 1秒

(2007年11月17日 3小时完成)

说明:
1. 文件名(程序名和输入输出文件名)必须使用小写
2. C/C++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。
3. 全国统一评测时采用的机器参考配置为:CPU 2.0GHz,内存256M。

1.奖学金
(scholar.pas/c/cpp)

【问题描述】
某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金。期末,每个学生都有3门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学排在前面,这样,每个学生的排序是唯一确定的。
任务:先根据输入的3门课的成绩计算总分,然后按上述规则排序,最后按排名顺序输出前5名学生的学号和总分。注意,在前5名同学中,每个人的奖学金都不相同,因此,你必须严格按上述规则排序。例如,在某个正确答案中,如果前两行的输出数据(每行输出两个数:学号、总分)是:
7 279
5 279
这两行数据的含义是:总分最高的两个同学的学号依次是7号、5号。这两名同学的总分都是279(总分等于输入的语文、数学、英语三科成绩之和),但学号为7的学生语文成绩更高一些。如果你的前两名的输出数据是:
5 279
7 279
则按输出错误处理,不能得分。
【输入】
输入文件scholar.in包含n+1行:
第1行为一个正整数n,表示该校参加评选的学生人数。
第2到n+1行,每行有3个用空格隔开的数字,每个数字都在0到100之间。第j行的3个数字依次表示学号为j-1的学生的语文、数学、英语的成绩。每个学生的学号按照输入顺序编号为1~n(恰好是输入数据的行号减1)。
所给的数据都是正确的,不必检验。
【输出】
输出文件scholar.out共有5行,每行是两个用空格隔开的正整数, 依次表示前5名学生的学号和总分。

【输入输出样例1】
scholar.in scholar.out
6
90 67 80
87 66 91
78 89 91
88 99 77
67 89 64
78 89 98 6 265
4 264
3 258
2 244
1 237

【输入输出样例2】
scholar.in scholar.out
8
80 89 89
88 98 78
90 67 80
87 66 91
78 89 91
88 99 77
67 89 64
78 89 98 8 265
2 264
6 264
1 258
5 258

【限制】
50%的数据满足:各学生的总成绩各不相同
100%的数据满足:6<=n<=300

2.纪念品分组
(group.pas/c/cpp)

【题目描述】
元旦快到了,校学生会让乐乐负责新年晚会的纪念品发放工作。为使得参加晚会的同学所获得的纪念品价值相对均衡,他要把购来的纪念品根据价格进行分组,但每组最多只能包括两件纪念品,并且每组纪念品的价格之和不能超过一个给定的整数。为了保证在尽量短的时间内发完所有纪念品,乐乐希望分组的数目最少。
你的任务是写一个程序,找出所有分组方案中分组数最少的一种,输出最少的分组数目。

【输入】
输入文件group.in包含n+2行:
第1行包括一个整数w,为每组纪念品价格之和的上限。
第2行为一个整数n,表示购来的纪念品的总件数。
第3~n+2行每行包含一个正整数pi (5 <= pi <= w),表示所对应纪念品的价格。

【输出】
输出文件group.out仅一行,包含一个整数,即最少的分组数目。

【输入输出样例】
group.in group.out
100
9
90
20
20
30
50
60
70
80
90 6

【限制】
50%的数据满足:1 <= n <= 15
100%的数据满足:1 <= n <= 30000, 80 <= w <= 200

3.守望者的逃离
(escape.pas/c/cpp)

【问题描述】
恶魔猎手尤迪安野心勃勃,他背叛了暗夜精灵,率领深藏在海底的娜迦族企图叛变。守望者在与尤迪安的交锋中遭遇了围杀,被困在一个荒芜的大岛上。为了杀死守望者,尤迪安开始对这个荒岛施咒,这座岛很快就会沉下去。到那时,岛上的所有人都会遇难。守望者的跑步速度为17m/s,以这样的速度是无法逃离荒岛的。庆幸的是守望者拥有闪烁法术,可在1s内移动60m,不过每次使用闪烁法术都会消耗魔法值10点。守望者的魔法值恢复的速度为4点/s,只有处在原地休息状态时才能恢复。
现在已知守望者的魔法初值M,他所在的初始位置与岛的出口之间的距离S,岛沉没的时间T。你的任务是写一个程序帮助守望者计算如何在最短的时间内逃离荒岛,若不能逃出,则输出守望者在剩下的时间内能走的最远距离。注意:守望者跑步、闪烁或休息活动均以秒(s)为单位,且每次活动的持续时间为整数秒。距离的单位为米(m)。

【输入】
输入文件escape.in仅一行,包括空格隔开的三个非负整数M, S, T。
【输出】
输出文件escape.out包含两行:
第1行为字符串“Yes”或“No”(区分大小写),即守望者是否能逃离荒岛。
第2行包含一个整数。第一行为“Yes”(区分大小写)时表示守望者逃离荒岛的最短时间;第一行为“No”(区分大小写)时表示守望者能走的最远距离。

【输入输出样例1】
escape.in escape.out
39 200 4 No
197

【输入输出样例2】
escape.in escape.out
36 255 10 Yes
6

【限制】
30%的数据满足:1 <= T <= 10, 1 <= S <= 100
50%的数据满足:1 <= T <= 1000, 1 <= S <= 10000
100%的数据满足:1 <= T <= 300000, 0 <= M <= 1000, 1 <= S <= 108.

4.Hanoi双塔问题
(hanoi.pas/c/cpp)

【问题描述】
给定A、B、C三根足够长的细柱,在A柱上放有2n个中间有孔的圆盘,共有n个不同的尺寸,每个尺寸都有两个相同的圆盘,注意这两个圆盘是不加区分的(下图为n=3的情形)。现要将这些圆盘移到C柱上,在移动过程中可放在B柱上暂存。要求:
(1)每次只能移动一个圆盘;
(2)A、B、C三根细柱上的圆盘都要保持上小下大的顺序;
任务:设An为2n个圆盘完成上述任务所需的最少移动次数,对于输入的n,输出An。

【输入】
输入文件hanoi.in为一个正整数n,表示在A柱上放有2n个圆盘。
【输出】
输出文件hanoi.out仅一行,包含一个正整数, 为完成上述任务所需的最少移动次数An。

【输入输出样例1】
hanoi.in hanoi.out
1 2

【输入输出样例2】
hanoi.in hanoi.out
2 6

【限制】
对于50%的数据,1<=n<=25
对于100%的数据,1<=n<=200

【提示】
设法建立An与An-1的递推关系式。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-10-31
Free Pascal是个由国际组织开发的完全的win32的pascal语言编译器,类似delphi,可编写windows程序。
此前被广泛使用的PASCAL编译器普遍为Turbo Pascal & Borland pascal。但是它们可用的空间十分有限。而Free Pascal理论上可以使用4GB内存。所以在利用Free Pascal编程的时候,可以改变原有思路,将大量时间转嫁给空间,提高效率。
虽然Free Pascal尽量设计得和Turbo Pascal接近,但是由于以下的两个原因,两者之间还是有一些区别的:
1. Free Pascal是一个32位的编译器,而Turbo Pascal只是16位编译器;
2. Free Pascal是一个跨平台的编译器,而Turbo Pascal只在windows和DOS上使用。
如果你的代码是遵守ANSI Pascal的,那么代码从Turbo Pascal移植到Free Pascal是没有问题的。
下面是在Turbo Pascal上可以使用,但是在Free Pascal就不能使用的一些语言特性:
1. 函数和过程在使用时,参数的类型必须和定义时完全一致。原因是在Free Pascal中添加了函数,EXCEPT,RAISE成为了关键字,因此不能作为函数和过程的名字。
3. FAR,NEAR不再是关键字了。原因是Free Pascal是32位系统,不再需要这些关键字。
4. 布尔表达式不一定要全部进行计算。只要最终结果已经能够确定,就不再计算其它还没有计算的部分了。比如布尔表达式exp1 AND exp2 AND exp3,如果已知exp1的结果是false,那么怎么表达式的结果肯定是false,exp2和exp3就不用进行计算了。
5. 在Free Pascal中,集合中的元素都是4个字节长的。
6. 表达式执行的顺序是不确定的。比如对于表达式a:=g(2)+f(3); 不保证g(2)一定在f(3)之前执行。
7. 如果用Rewrite打开文件,那么文件就只能被写入了。如果需要读取这个文件,要对文件执行Reset。
8. Free Pascal在程序结束之前一定要关闭输出文件,否则输出文件可能不能被正确的写入。
9. Free Pascal理论上可以使用4GB的内存,因此实际上几乎可以使用系统中的所有剩余内存(除非赛题中有内存限制)。这是Free Pascal由于32位的编译器。但是对于Turbo Pascal来说,由于是16位的编译器,因此不能定义大小超过64KB的数据类型和变量,并且在DOS实模式下可以使用的内存总数只有640KB。
下面是Free Pascal相对于Turbo Pascal扩充的一些功能:
1. 函数可以返回复杂的类型,比如记录和数组。
2. 在函数中,函数的返回值通常可以作为一个变量来处理。比如:
function a : longint;
begin
a:=12;
while a>4 do
begin
{...}
end;
end;
这个例子在Turbo Pascal中,a>4会被认为是函数的递归调用,但是在Free Pascal中会认为a只是一个变量。如果想在Free Pascal中实现递归调用,就要写成下面的形式:
function a : longint;
begin
a:=12;
{ this is the recursive call }
if a()>4 then
begin
{...}
end;
end;
3. exit可以接受一个参数作为函数的返回值。比如:
function a : longint;
begin
a:=12;
if a>4 then
begin
exit(a*67); {函数的返回值就是a*67 }
end;
end;
4. Free Pascal支持函数重载。可以用相同的名字定义不同的函数,只要这些函数的参数不同,就是不同的函数。比如:
procedure DoSomething (a : longint);
begin
{...}
end;
procedure DoSomething (a : real);
begin
{...}
end;
可以使用不同的参数类型longint或者real来调用不同的DoSomething过程。
由于这个功能,函数的提前声明必须有完整的参数声明:
procedure x (v : longint) : forward;
{...}
procedure x;{ 这里定义的过程x重载了前面声明的过程x。因此这里的两个x是不同的}
begin
{...}
end;
5. Free Pascal容许运算符重载。比如,可以自己为矩阵运算定义一个“+”运算。
6. Free Pascal在windows 95及其以上的windows版本上支持长文件名。对于文件名,由于windows系统对大小写不敏感,因此在程序中,文件名的大小写是无关的。但是对于其它大小写敏感的系统,比如linux,程序中用到的文件名必须和系统中的文件名完全一致。但是由于信息学竞赛的评测系统一般是linux,因此要求程序中的文件名和系统中的文件名一样。

我了····
第2个回答  2008-10-20
历届noip复赛试题,我这里有,从95年到04年,你要吗?
第3个回答  2008-10-29
一个自然数是素数, 且它的数字位置经过任意对换后仍为素数, 称为绝对素数. 例如13. 试找出所有这样的二位绝对素数.
第4个回答  2008-10-20
???什么意思?
相似回答