NOIP复赛的问题

下面是2004年的NOIP(提高)的一道题,题比较简单,我还能做,只是我不能按它的要求做,我第一次参加,而且没学过文件,请大家帮我把完整的符合要求的答案发给我(不仅要源程... 下面是2004年的NOIP(提高)的一道题,题比较简单,我还能做,只是我不能按它的要求做,我第一次参加,而且没学过文件,请大家帮我把完整的符合要求的答案发给我(不仅要源程序,还要什么文件保存之类的),先谢啦!

第十届全国青少年信息学奥林匹克联赛复赛试题
(提高组 3小时完成)
http://www.oifans.cn

一、津津的储蓄计划

(Save.pas/dpr/c/cpp).

【问题描述】

    津津的零花钱一直都是自己管理。每个月的月初妈妈给津津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
是要PASCAL的程序,谢谢!
展开
 我来答
揭绮波Ic
2006-11-18 · 超过19用户采纳过TA的回答
知道答主
回答量:154
采纳率:0%
帮助的人:62.4万
展开全部
----是PASCAL的没错。加了文件输入输出了。:

program p1096;
var Saved:longint;
leave:longint;
want:longint;
i:longint;
begin
assign(input,'save.in');
reset(input);
assign(output,'save.out');
rewrite(output);
Saved:=0;
leave:=0;
for i:=1 to 12 do begin
leave:=leave+300;
read(want);
if want>leave then
begin
writeln('-',i);
halt;
end;
leave:=leave-want;
Saved:=Saved+((leave) div 100);
leave:=leave mod 100;
end;
writeln(Saved*120+leave);
close(input);
close(output);
end.
回答者:南方椰岛 - 魔法师 四级 11-15 15:35

program save(input,output);
var total,sum,i,c:integer;
s:array[1..12]of integer;
begin
assign(input,'save.in');
assign(output,'save.out');
reset(input);
rewrite(output);
total:=0;sum:=0;
for i:=1 to 12 do begin
total:=total+300;
readln(s[i]);
if total<s[i] then begin write(-1*i);close(output);halt;end
else begin
total:=total-s[i];
c:=total div 100;
sum:=sum+c*100;
total:=total -c*100;
end;
end;
close(input);
writeln(total+sum*1.2:0:0);
close(output);
end.

津津的储蓄计划 解题报告
<问题描述>
津津的零花钱一直都是自己管理。每个月的月初妈妈给津津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

<算法分析>
这是本次分区联赛当中最简单的题,算法也很简单:模拟法。
每个月把津津手上的钱加上妈妈给的300元,再减去预算,得到当前手中的钱,假如这个钱的值是负数(出现亏损),那么就输出负的月数,接着算出存入的钱,并且将手中的钱减去。如此往复,直到最后按要求输出结果或者中间已经停止。

<数据结构>
边读边处理。只需要记录当钱手中的钱和已存入的钱即可。时间、空间复杂度均为常数。

<代码清单>
#include <fstream>
using namespace std;

ifstream fin("save.in");
ofstream fout("save.out");

void init() {
int p, save = 0, cnt = 0;

for (int i = 1; i <= 12; i ++) {
fin >> p;
cnt = cnt + 300 - p;
while (cnt >= 100) {
save += 100;
cnt -= 100;
}
if (cnt < 0) {
fout << - i << endl;
return;
}
}
fout << cnt + int(save * 1.2) << endl;
}

int main() {
init();
return 0;
}

<小结>
这是本次NOIP最简单、最基本的问题。选手只要读清题目,然后动手做就可以了。解决此类问题没有什么技巧,最重要的是不在关键时刻出现低级错误。
回答者:haxaxxsc - 江湖新秀 四级 11-16 21:33

要想分配好学习时间就要制定学习计划!!!!这是相当重要的!!!

①学习计划主要是计划对空余时间的利用。这个时间一般规定两件事:补课和提高。
②列出具体任务,然后把学习任务具体分配到每一周、每一天去,再计算一下,每天可以有多少学习时间,每项内容大致需要花费多少时间。计划中一定要安排严格的、足够数量的基本功训练,力戒好高骛远。
③检查效果,及时调整:每个计划执行到结束或执行一个阶段后,就应当检查一下效果如何。如果效果不好,就要找原因,进行必要的调整。检查内容是:是不是基本按计划去做?计划任务是否完成?学习效果如何?没完成计划的原因是什么?什么地方安排太紧?哪些环节安排轻松?等等。通过检查后,再修订计划,改变不科学、不合理的地方。
④不要贪心,要注意留出空余时间。一张一弛,文武之道,计划制定时,也要考虑吃饭、睡觉、休息、娱乐、体育锻炼等活动时间。
⑤灵活调整学习计划:确定计划后,就应该严格执行,但在学习中,根据实际情况灵活安排,不可过于拘泥。注意和同学交流学习心得,向老师请教学习方法,及时充实调整学习计划。

最后补充几句:计划虽然制定好了,但必须严格按照计划去做,否则辛苦制定的计划一点用也没有!!!而且还浪费墨水!! 呵呵! 开个玩笑! ★总之一定要严格按照计划的去做,才能达到最理想的效果!!★
百度网友4130623
2006-11-16 · TA获得超过1117个赞
知道小有建树答主
回答量:597
采纳率:0%
帮助的人:446万
展开全部
program save(input,output);
var total,sum,i,c:integer;
s:array[1..12]of integer;
begin
assign(input,'save.in');
assign(output,'save.out');
reset(input);
rewrite(output);
total:=0;sum:=0;
for i:=1 to 12 do begin
total:=total+300;
readln(s[i]);
if total<s[i] then begin write(-1*i);close(output);halt;end
else begin
total:=total-s[i];
c:=total div 100;
sum:=sum+c*100;
total:=total -c*100;
end;
end;
close(input);
writeln(total+sum*1.2:0:0);
close(output);
end.

津津的储蓄计划 解题报告
<问题描述>
津津的零花钱一直都是自己管理。每个月的月初妈妈给津津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

<算法分析>
这是本次分区联赛当中最简单的题,算法也很简单:模拟法。
每个月把津津手上的钱加上妈妈给的300元,再减去预算,得到当前手中的钱,假如这个钱的值是负数(出现亏损),那么就输出负的月数,接着算出存入的钱,并且将手中的钱减去。如此往复,直到最后按要求输出结果或者中间已经停止。

<数据结构>
边读边处理。只需要记录当钱手中的钱和已存入的钱即可。时间、空间复杂度均为常数。

<代码清单>
#include <fstream>
using namespace std;

ifstream fin("save.in");
ofstream fout("save.out");

void init() {
int p, save = 0, cnt = 0;

for (int i = 1; i <= 12; i ++) {
fin >> p;
cnt = cnt + 300 - p;
while (cnt >= 100) {
save += 100;
cnt -= 100;
}
if (cnt < 0) {
fout << - i << endl;
return;
}
}
fout << cnt + int(save * 1.2) << endl;
}

int main() {
init();
return 0;
}

<小结>
这是本次NOIP最简单、最基本的问题。选手只要读清题目,然后动手做就可以了。解决此类问题没有什么技巧,最重要的是不在关键时刻出现低级错误。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
南方椰岛
2006-11-15 · TA获得超过745个赞
知道小有建树答主
回答量:271
采纳率:0%
帮助的人:0
展开全部
----是PASCAL的没错。加了文件输入输出了。:

program p1096;
var Saved:longint;
leave:longint;
want:longint;
i:longint;
begin
assign(input,'save.in');
reset(input);
assign(output,'save.out');
rewrite(output);
Saved:=0;
leave:=0;
for i:=1 to 12 do begin
leave:=leave+300;
read(want);
if want>leave then
begin
writeln('-',i);
halt;
end;
leave:=leave-want;
Saved:=Saved+((leave) div 100);
leave:=leave mod 100;
end;
writeln(Saved*120+leave);
close(input);
close(output);
end.
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
生飞舟0j2
2006-11-26
知道答主
回答量:13
采纳率:0%
帮助的人:0
展开全部
我也是..
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式