最近我正在跟着一本书——《信息学奥赛一本通(C++版)》学习C++,书后练习题中有一道题如下:
津津的零花钱一直都是自己管理。每个月的月初妈妈给津津300元钱,津津会预算这个月的花销,并且总能做到实际花销与预算的相同。
为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里,到了年末她会加上20%还给津津。因此津津制订了一个储蓄计划:每个月每个月的月初,在得到妈妈给的零花钱后,如果她预计到这个月的月末手中还会有多余100元或恰好100元,她就会把整百的钱存在妈妈那里,剩余的钱留在自己手中。
例如,11月初津津手中有83元,妈妈给了津津300元。津津预计11月的花销是180元,那么她就会在妈妈那里存200元,自己留下183元.到了11月末,津津手中会剩下3元钱。
现在请你根据2020年1月到12月每个月津津的预算,计算到2020年末,妈妈将津津平常存的钱加上20%还给津津后,津津手中会有多少钱。
输入:
包括12行数据,每行包含一个小于350的非负整数,分别表示1月到12月津津的预算。
输出:
只包含一个整数。如果储蓄计划实施过程中出现某个月钱不够用的情况,输出-X,X表示出现这种情况的第1个月;否则输出到2020年末津津手中会有多少钱。
样例输入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
我的程序如下:
# include <cstdio>
using namespace std;
int main()
{
int money = 0, budget, deposit = 0, back = 0, result = 0;
//分别定义money(津津手里的钱),budget(每月预算)、deposit(津津存到妈妈手里的钱)、back(最后妈妈连本带息还给津
//津的钱)和result(最终津津手里有多少钱)
for (int i = 1; i <= 12; ++i) //利用for循环输入12遍月预算
{
money += 300; //每月妈妈给津津零花钱300元
scanf("%d", &budget); //用户输入该月预算
money -= budget; //求出抛去该月预算还剩多少钱
if (money < 0) //判断钱是不是不够了
{
printf("%d\n", -i);
return 0; //输出-X,结束程序
}
else
{
deposit += ((money / 100) * 100);
money %= 100; //(问题在这)求出剩余钱当中有多少整百的钱,存入妈妈那里(deposit增加,money减少)
}
}
back = deposit * 1.2; //(问题在这)连本带息还给津津1.2倍的钱
result = back + money; //加上津津12月手里还剩的钱就是最终结果
printf("%d\n", result);
return 0; //结束程序
}
那本书有一个配套的测评网站——http://ybt.ssoier.cn:8088/,我把程序传输上去之后说不对,我很迷茫,检查多遍后查看参考答案,答案如下:
【参考程序】
#include <iostream>
#include <cstdio>
using namespace std;
int x; int i,n,t; bool f=1;
int main()
{
t=0; n=0; //t存津津留在手里的钱,n存津津存在妈妈手里的钱,初始值均赋为0
for(i=1;i<=12;++i)
{
scanf("%d",&x);
t=t+300-x;
if (t<0)
{
printf("%d\n",-i);
return 0;
}
if (t>=100)
{
n=n+t/100; t%=100;
}
}
printf("%d\n",n*120+t);
return 0;
}
我看完很纳闷,答案和我没区别呀?经过多次测试我发现,测评网站认为我先*100再*1.2不对,应该像答案一样直接乘120,这两个难道不是一样的吗???

100*1.2=120呀?!



是不是因为乘1.2之后类型变了或者不符了???
求助各位大佬,感谢!!!十分感谢!!!


