pascal题目三题

第一题:WZK吃小鸡腿
时间限制: 1 Sec 内存限制: 64 MB
题目描述
chicken.pas
问题描述: As is known to all,WZK很能吃小鸡腿,但他的胃毕竟有一个最大容纳值c,否则为胃中小鸡腿的巨大引力场和lōng场叠加后会有很可怕的效果。在CZYZ的食堂一共有n种小鸡腿有卖,每种小鸡腿都有有限的个数、重量和让WZK感到的满意度。WZK想在肚子不被撑爆的前提下,取得最大的满意度值。然后lōng场就得到了大大的power up。
输入
第一行:两个正整数n,c。 接着n行,每行三个正整数Ai,Mi,Wi,分别表示每种小鸡腿的个数、重量和满意度。
输出
一个正整数,表示最大的满意度。
样例输入
3 10 2 1 3 1 5 8 3 3 5
样例输出
19
提示
20%的数据ΣAi<=25 另外30%的数据c<=1000, ΣAi<=10000 对于100%的数据c<=10000,n<=100,Ai<=1000

第二题:求和
时间限制: 1 Sec 内存限制: 128 MB
题目描述
(instruckcije.pas/c/cpp)
小马克今年成为小学生。不久后她将进行她的第一次考试,其中包括数学考试。她非常认真地复习,她认为自己已经准备好了。她的哥哥通过给她提出问题并解决的方式帮助她。 他的问题是给定一连串整数:依次由1个1,2个2,3个 3 等组成,即1223334444……。现在他给马克两个整数A和B;他的任务是求出由第A个到第B个数的。如果A是1,B是3,答案为1+2+2=5。 给一个问题,然后计算它们的和,马克的哥哥能够验证答案正确与否。
输入
输入文件instruckcije.in只有一行,包括正整数A和B,1≤A ≤B≤1000
输出
输出文件instruckcije.out共一行,为和的值。
【输入输出样例1】
输入:
1 3
输出:
5
【输入输出样例2】
输入:
3 7
输出:
15

第三题:弗雷德的困惑
时间限制: 1 Sec 内存限制: 64 MB
题目描述
fld.pas/in/out
弗雷德先生想在路易斯安娜州买一块地造房子。 在调查中,他了解到由于密西西比河的侵蚀,路易斯安娜州正在以每年50平方英里的速度变小。因为弗雷德先生希望在他的新房子里生活直至终老,所以他想知道他的房子是否会被侵蚀掉。 经过进一步研究,弗雷德发现将要被侵蚀的陆地呈半圆形。半圆是一个以(0,0)点为中心的圆的一半,半圆的直边是X轴(如下图所示)。X轴以下的部分在水中。在第一年的开始,圆的面积是0。

输入
仅一行,为两个整数x,y(-109<=x<=109,0<=y<=109),表示房子的坐标。
输出
可以最多使用多少年。 注意:如在边界上,认为已经被侵蚀。
样例输入
5 5
样例输出
1
第一题
var n,m,t,w,c,i,j,x:Longint;
f:array[0..10000000] of longint;
begin
read(n,m);
for i:=1 to n do
begin
read(t,w,c);
for j:=1 to t do
for x:=m downto w do
if f[x-w]+c>f[x] then f[x]:=f[x-w]+c;
end;
write(f[m]);
end.
时间超限70%,大家帮忙修改一下。

第1个回答  2013-10-04
第二题:
program instruckcije;
var s:array[1..2000] of longint;
a,b,i,j,n:longint;
begin
assign(input,'instruckcije.in'); reset(input);
assign(output,'instruckcije.out'); rewrite(output);
i:=1;
n:=1;
j:=1;
repeat
for i:=1 to n do begin
s[j]:=n;
j:=j+1;
end;
n:=n+1;
until j>1000;{生成由1个1、2个2、3个3……n个n组成的数组}
readln(a,b);
n:=0;
for i:=a to b do n:=n+s[i];{确定起始值与终值,累加}
writeln(n);
close(input);
close(output);
end.追问

对了,第一题再想想啊!

第2个回答  2013-10-03
第3题:
var x,y:real;
begin
readln(x,y);
writeln(trunc(pi*(x*x+y*y)/100));
end.追问

第三题对了 帮忙再想想前两题啊!!!谢谢了

追答

没有空了,只能够再做一题了:
第二题:求和

var a,b,i,j,j1,s:longint;

begin
readln(a,b);
i:=1; j:=1; j1:=0; s:=0;
while j<a do begin j1:=j; inc(i); inc(j,i); end;
inc(s,(j-a+1)*i); j1:=j; inc(i); inc(j,i);
while j<b do
begin
inc(s,(j-j1)*i); j1:=j; inc(i); inc(j,i);
end;
inc(s,(b-j1)*i);
writeln(s);
end.

追问

看不懂,答案错误20%,
第一题再帮忙想想。

追答

var n,c,a,m,w,i,j,k:Longint;
f:array[0..10000] of longint;
begin
read(n,c); {小鸡腿种数、胃最大容量}
for i:=1 to n do
begin
read(a,m,w); {个数、重量和满意度}
for j:=1 to a do
for k:=c downto m do
if f[k-m]+w>f[k] then f[k]:=f[k-m]+w;
end;
write(f[c]);
end.

追问

时间超限90%,只有1个点没超时啊!
帮忙在想想1.2两题

追答

var a,b,i,j,k,s:longint;
begin
readln(a,b);
i:=1; j:=1; k:=1; s:=0; {i所填的数,j数串中的位置,k-i的个数}
while ja then inc(s,i div 10);
while jb) then dec(s,i div 10);
writeln(s);
end.

关于第一题,给出一点改进的方向:若第i种有17个,不要将17个全部列为17种,而是将其列为
1个,2个,4个,8个,16个为一组的5种。若是第j个有1000个的话,就只要列1,2,4,……,512共9个即可。可大大降低时间复杂度。

追问

第二题解决了,想想第一题吧!

第3个回答  2013-10-03
你是常州一中的么!!
第4个回答  2018-07-30
第一题
var
a,b:longint;
begin
readln(a,b);
writeln(a+b);
end.
绝对能对,我保证,不信拉倒