初莫M 发表于 2023-10-18 17:54:01

为什么有剩余钱时输出的的结果不对啊

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

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

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

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

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

输入描述
共12行,每行是一个小于350的非负整数,分别表示1~12月津津的预算。

输出描述
一行一个整数。如果储蓄计划实施过程中出现某个月钱不够用的情况,输出−X
,X
表示出现这种情况的第一个月;否则,输出到2004年年末津津手中会有多少钱。
#include<stdio.h>
int main()
{
    int i,x,sum=0,c=0;
    for(i=1;i<13;i++)
    {
      scanf("%d",&x);
      sum=sum+300-x;
      if(sum<0){printf("-%d",i);return 0;}
      if(sum/100>=1)
      {
            c=sum/100*100;
            sum=sum%100;
      }
    }
    printf("%d",sum+c*12/10);
}

陶远航 发表于 2023-10-18 17:54:40

这个问题是关于津津的储蓄计划的一个编程问题。津津每个月都会得到300元的零花钱,如果她预计到这个月的月末手中还会有多于100元或恰好100元,她就会把整百的钱存在妈妈那里,剩余的钱留在自己手中。年末时,妈妈会把津津存的钱加上20%还给津津。

你的代码看起来是正确的,它遵循了这个逻辑。但是,你可能遇到的问题可能是由于你的代码没有正确处理存款和余额的关系。在你的代码中,你在每个月都尝试从余额中减去预算,然后检查余额是否为负。如果余额为负,你就输出那个月。否则,你就把余额中的整百部分存入储蓄,并保留余额中的余数。

然而,你在计算年末余额时,你只是简单地把存款乘以1.2加上最后的余额。这可能会导致错误的结果,因为你没有考虑到津津可能在年中的某个时候取出一部分存款。

为了解决这个问题,你需要在每个月结束时更新存款和余额。你应该把存款中的整百部分加到储蓄中,然后在年末时,把储蓄乘以1.2加到余额中。这样,你就可以得到正确的年末余额。

这是修改后的代码:

#include<stdio.h>
int main() {
    int i,x,sum=0,c=0;
    for(i=1;i<13;i++)
    {
      scanf(\"%d\",&x);
      sum=sum+300-x;
      if(sum<0){printf(\"-%d\",i);return 0;}
      c+=sum/100*100; // 把整百部分加到储蓄中
      sum=sum%100; // 余额只保留余数部分
    }
    printf(\"%d\",sum+c*12/10); // 年末时,把储蓄乘以1.2加到余额中
    return 0;
}


这个代码应该能解决你的问题。如果你还有其他问题,欢迎继续提问。
请注意,本回答来自GPT-4
如果问题已经解决,请设置最佳答案

isdkz 发表于 2023-10-18 17:54:44

这段代码的作用是根据津津每个月的预算情况,判断储蓄计划的实施过程中是否会出现钱不够用的情况。如果不会出现,还需要计算到2004年年末,津津手中会有多少钱。

代码首先定义了变量i、x、sum和c,分别表示循环变量、每个月的预算、津津手中的钱和存在妈妈那里的钱。然后通过一个循环读取每个月的预算,并根据津津每个月的预算情况进行相应的处理。

在循环中,首先从输入中获取每个月的预算x,并将其累加到sum中。然后判断sum是否小于0,如果小于0,则输出负数表示出现钱不够用的情况,并返回。接着判断sum是否大于等于100,如果是,则将sum除以100取整得到的商乘以100赋值给c,同时将sum对100取余数赋值给sum。这样就实现了将整百的钱存在妈妈那里,剩余的钱留在津津手中的操作。

循环结束后,如果没有出现钱不够用的情况,就输出到2004年年末津津手中会有多少钱。具体计算方式是将sum加上c乘以12再除以10。

总结一下,这段代码的作用是根据津津每个月的预算情况,判断储蓄计划的实施过程中是否会出现钱不够用的情况,并计算到2004年年末津津手中会有多少钱。

Mike_python小 发表于 2023-10-18 17:54:46

这段代码逻辑上没有问题。

其中,sum存储的是津津每月手中剩余的钱(包括之前存到妈妈那里的钱),c存储的是存到妈妈那里的整百元钱的总数。

如果津津在某个月剩余的钱不够花销,则输出该月份,并退出程序。

如果津津每个月都能按照计划执行,最后输出的是她手中剩余的钱加上存到妈妈那里钱的20%再乘以12个月的总数,即sum+c*12/10。

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
页: [1]
查看完整版本: 为什么有剩余钱时输出的的结果不对啊