谁能解决一下我的一个pascal问题啊!追+100分!!!

【问题描述】津津的零花钱一直都是自己管理。每个月的月初妈妈给津津300元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同。为了让津津学习如何储蓄,妈妈提出,津... 【问题描述】津津的零花钱一直都是自己管理。每个月的月初妈妈给津津300元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同。

为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里,到了年末她会加上20%还给津津。因此津津制定了一个储蓄计划:每个月的月初,在得到妈妈给的零花钱后,如果她预计到这个月的月末手中还会有多于100元或恰好100元,她就会把整百的钱存在妈妈那里,剩余的钱留在自己手中。

例如11月初津津手中还有83元,妈妈给了津津300元。津津预计11月的花销是180元,那么她就会在妈妈那里存200元,自己留下183元。到了11月月末,津津手中会剩下3元钱。

津津发现这个储蓄计划的主要风险是,存在妈妈那里的钱在年末之前不能取出。有可能在某个月的月初,津津手中的钱加上这个月妈妈给的钱,不够这个月的原定预算。如果出现这种情况,津津将不得不在这个月省吃俭用,压缩预算。

现在请你根据2004年1月到12月每个月津津的预算,判断会不会出现这种情况。如果不会,计算到2004年年末,妈妈将津津平常存的钱加上20%还给津津之后,津津手中会有多少钱。

【输入文件】输入文件save.in包括12行数据,每行包含一个小于350的非负整数,分别表示1月到12月津津的预算。

【输出文件】输出文件save.out包括一行,这一行只包含一个整数。如果储蓄计划实施过程中出现某个月钱不够用的情况,输出-X,X表示出现这种情况的第一个月;否则输出到2004年年末津津手中会有多少钱。

【样例输入1】

290

230

280

200

300

170

340

50

90

80

200

60

【样例输出1】

-7

【样例输入2】

290

230

280

200

300

170

330

50

90

80

200

60

【样例输出2】

1580

我的程序是这样的:请看图片,可是编译是错的,请指点迷津,按照我的思路来,看我哪里错了!!!!谢谢各位了!
展开
 我来答
刺猬新语
2011-07-10 · 超过14用户采纳过TA的回答
知道答主
回答量:30
采纳率:0%
帮助的人:19.3万
展开全部
第9行是a[1],写错了(其实写成a[1]也不对,为什么要写这句呢?直接去掉这句和下一句,11行从i:=1 to 12就可以了,因为12个月的处理都是一样的)
好像整个程序都有点问题,我帮你梳理一下吧
先来分析需要的变量:每个月花的钱:a[i],j表示每个月初手里的钱,z表示存在妈妈那里的钱(是这样吧?)
你程序里的问题有:z既然是在妈妈那里的钱,就要可以累加吧,但是你只计算了最后一个月的。
a[i]:=a[i+1]又是干什么的呢?a是用来储存每个月花的钱,应该不需要改动。
还有你没有判断钱够不够花的步骤(这个只需要每个月初看j是否加了300后〉=a[i]就可以了)
所以从第9行后开始可以这样改:
z:=0;j:=0;{这两个变量是累积使用的,所以一定要初始化}
for i:=1 to 12 do{12个月处理都是一样的,所以用一个这样的循环,i表示第几个月}
begin{月初}
j:=j+300;{从妈妈手里拿钱}
if j<a[i] then begin writeln(-i);exit;end;{糟糕,不够这个月用了,按要求输出-X,X表示出现这种情况的第一个月}
j:=j-a[i];{月末该剩多少钱}
z:=z+(j div 100)*100;{整百的存在妈妈那,记得是z:=z+……,以前存的也不要丢了}
j:=j mod 100;
end;
writeln(z*1.2+j);{如果程序还能运行到这里,说明每个月都是够用的,妈妈那存的钱*1.2就是返还的钱,j就是手里当时有的现金}
end.

大概就是这样了,你慢慢看一下吧,关键是要分清楚每一步要干什么,哪个量都是干什么的。看样子你才刚开始学pascal,加油!
nlxmmc
2011-07-10 · TA获得超过207个赞
知道小有建树答主
回答量:171
采纳率:0%
帮助的人:191万
展开全部
你没有判断前不够用的情况啊!!!
样例1里面输出-7,你没考虑到啊!!!
program ex;
var a:array[1..12]of longint;
i,j,count,p,q:longint;
flag:boolean;
begin
j:=0;
count:=0;
for i:=1 to 12 do
readln(a[i]);
q:=0;flag:=true;
for i:=1 to 12 do
begin
j:=j+300-a[i];
if j<0 then begin flag:=false;break;end;
q:=q+(j div 100);
j:=j mod 100;
writeln(j,' ',q);
end;
if flag then
writeln(j+q*120)
else
writeln(-i);
end.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
英吟j2
2011-07-11 · 超过40用户采纳过TA的回答
知道小有建树答主
回答量:112
采纳率:0%
帮助的人:99.5万
展开全部
program save;
var
a:array[1..12]of integer;
s,c,i,k:integer;
begin
for i:=1 to 12 do
read(a[i]);
s:=0; c:=0;
for i:=1 to 12 do
begin
s:=300+s-a[i]; //计算这个月将会剩下多少钱
if s>=100 then begin //判断是否可以存钱,如果可以就存
c:=c+(s div 100)*100;
s:=s-(s div 100)*100;
end;
if s<0 then begin // 判断是否不够钱用,如果不够就输出i,结束程序
write('-',i);
halt;
end;
end;
k:=trunc(c+c*0.2)+s; //能运行到这说明一年都够钱用,计算取出后的钱
write(k);
end.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式