信息奥赛真题:津津的储蓄计划

2023-09-01 14:41:02 浏览数 (1)

在数字化时代的浪潮下,编程已经不仅仅是一种技能,更是打开未来大门的钥匙。我们深信,每个孩子都是一个潜在的天才,只需要正确的引导和培养,他们就能在编程的世界中创造无限可能。 我们热衷于为孩子们提供高质量的编程指导。我们将编程视为一种思维工具,通过培养逻辑思维、问题解决能力和创新能力,我们致力于让每个孩子都能在信息学领域发挥出自己的潜力。 我们不仅仅局限于编程语言和算法,更着重培养孩子们的问题分析和解决能力,以及团队协作和沟通技巧。通过有趣的项目和挑战,我们将帮助孩子们逐步掌握信息学竞赛所需的知识和技能。 如果您希望和我们一起为孩子们提供一个积极、充满挑战性和公益性质的编程学习平台,欢迎加入我们!

前面的文章中我们跟幼儿园的小朋友们讲过了顺序结构、选择结构和循环结构,下面我们结合前面学习内容,来实战一下,看看真实的信息奥赛(NOIP)题目是什么样子。

【问题描述】

津津的零花钱一直都是自己管理。每个月的月初妈妈给津津 300元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同。

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

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

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

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

【输入】

输入12行数据,每行包含一个小于 350 的非负整数,分别表示 1 月到 12 月津津的预算。

【输出】

输出包括一行,这一行只包含一个整数。如果储蓄计划实施过程中出现某个月钱不够用的情况,输出-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


【分析问题】

当我们分析这个题目时,我们可以按照以下步骤来解决问题:

  1. 理解题意:首先,我们要仔细理解题目的描述,明白津津的储蓄计划和情况。我们已经知道了每个月的预算和妈妈的储蓄计划。
  2. 问题分解:将问题分解为两个部分。首先,我们需要判断在每个月津津是否能够按照妈妈的储蓄计划进行,并且不出现预算不足的情况。其次,如果每个月都能够按计划进行,我们需要计算到年末津津手里会有多少钱。
  3. 计算每个月的情况:从1月到12月,对每个月进行如下操作:
    • 判断津津手上的钱加上这个月的预算是否足够她的储蓄计划,如果不够,记录下这个月的序号并停止。
    • 如果足够,根据妈妈的储蓄计划,将整百的钱存在妈妈那里,剩下的钱保留在津津手里。
  4. 计算年末的钱:如果以上每个月的操作都能成功进行,那么说明津津的储蓄计划是有效的。在这种情况下,我们可以计算年末津津手里的钱。将每个月剩余的钱相加,再加上妈妈按20%的比例返还的钱,就能得出年末的总金额。
  5. 输出结果:如果在步骤3中发现了某个月预算不足,那么输出该月的序号,表示出现了问题。如果全部月份都执行成功,那么输出年末的总金额。

综上所述,我们可以用编程语言来实现这个解决方案。在代码中,我们将逐个遍历每个月的预算,判断津津的储蓄计划是否能够成功执行,然后根据情况计算年末的总金额或者输出出现问题的月份。


【代码实现】

代码语言:javascript复制
#include <iostream>
#include <cmath>
using namespace std;
int mth,ma,a; 
int main()
{
  for(int i = 1; i <= 12; i  )
  {
    cin >> mth; 
    a = a   300 - mth;
    if(a < 0)
    {
      cout << '-' << i << endl;
      return 0;
    }
    ma = ma   a/100 * 100;
    a = a % 100;
  }
  cout << ma   ma/5   a << endl;
  return 0;
}

代码非常简单,相信小朋友们一定就能看懂。

0 人点赞