目录
一,问题
二,思路
1,思路1
2,思路2
三,代码
1,思路1代码
2,思路2代码
四,用例输入输出
一,问题
二,思路
1,思路1
- 定义变量:①两个int型变量a(ljc每一个月的预算),ind(存放出现ljc第一次出现大手大脚的月份)②两个double类型变量cz(ljc存在自己身上的钱),cm(ljc存在妈妈那里的钱)③一个bool类型变量flag(用于程序最后判断该输出哪个内容)
- 使用for循环语句连续输入12个月份中ljc的不同预算a
- 将ljc的预算a分成四个部分:小于等于100(ljc可以自己存100-a即cz+=100-a,给妈妈200即cm+=200),大于100小于等于200(ljc可以自己存200-a,给妈妈100),大于200小于等于300(ljc可以自己存300-a,给妈妈0元),大于300(ljc需要自己判断一下,自己存的钱加上妈妈每一个月给的钱,是不是能够支付得了300+的预算,如果不能,让立起来的小旗子倒下,flag=0,并且让ind索引存放ljc第一次出现大手大脚的月份,需要注意的是,在存钱过程中,ljc可能有多次大手大脚钱不够的情况,但是我只要它返回出现第一次钱不够的月份,需要flag倒下之后ind变量只进行一次赋值,所以需要进行判读,如果ind不等于0,表示ind被赋值过,此时ind不做任何修改,ind=ind,否则就将ind赋值为i+1)
- 最后根据旗帜是不是立着的,输出不同不同的内容:①如果旗帜flag=1,旗帜立着,表示ljc没有大手大脚,年末能够得到妈妈给的钱还有自己存的钱。②反之,ljc在某一月大手大脚,旗帜倒下,flag=0,输出第一次开始大手大脚的月份。程序输出内容:“-第一次出现大手大脚的月份”。
2,思路2
- 定义变量:①两个int型变量a(ljc每一个月的预算),ind(存放出现ljc第一次出现大手大脚的月份),flag(用于程序最后判断该输出哪个内容)②两个double类型变量cz(ljc存在自己身上的钱),cm(ljc存在妈妈那里的钱)
- 使用for循环语句连续输入12个月份中ljc的不同预算a
- 在每一次输入a之后,都需要判断ljc存在自己手上的钱cz加上妈妈每一个月给的钱mg是否大于预算a,如果大于预算a,表示ljc这个月出现了大手大脚的情况,这个时候需要让旗帜flag倒下,并且给个索引变量ind存储当前月份(需要注意的是,在存钱过程中,ljc可能有多次大手大脚钱不够的情况,但是我只要它返回出现第一次钱不够的月份,需要flag倒下之后ind变量只进行一次赋值,所以需要进行判读,如果ind不等于0,表示ind被赋值过,此时ind不做任何修改,ind=ind,否则就将ind赋值为i+1)
- 第三步中,ljc大手大脚,但是如果ljc没有大手大脚,存的钱够预算的开支,我就得需要将ljc存的钱减去预算(cz=cz-a),就是ljc自己手上还剩的钱,当ljc存的钱cz有100块钱了,就可以存妈妈那里,这个时候需要加上while循环判断(while循环判断结束的标志为ljc的存的钱cz小于100的时候),如果存在ljc身上的钱有100块钱了,那么就将100给妈妈(cm+=100,cz-=100)。
- 最后根据旗帜是不是立着的,输出不同不同的内容:①如果旗帜flag=1,旗帜立着,表示ljc没有大手大脚,年末能够得到妈妈给的钱还有自己存的钱。②反之,ljc在某一月大手大脚,旗帜倒下,flag=0,输出第一次开始大手大脚的月份。程序输出内容:“-第一次出现大手大脚的月份”。
相应的流程图如下:
如果觉得上面的流程图有可以改进的地方请在评论区留言或者是私信我,我一定改。
三,代码
1,思路1代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a,flag=1,ind=0;
double cz=0,cm=0;
for(int i=0; i<12; i++)
{
cin>>a;
if(a<=100)
{
cz+=100-a;
cm+=200;
}
else if(a>100 & a<=200)
{
cz+=200-a;
cm+=100;
}
else if(a>200 & a<=300)
{
cz+=300-a;
cm+=0;
}
else if(a>300)
{
if(cz+300<a)
{
flag=0;
if(ind==0) ind=i+1;
else ind=ind;
}
else
{
cz=cz+300-a;
cm+=0;
}
}
if(cz>=100)
{
cz-=100;
cm+=100;
}
}
if(flag==0) cout<<'-'<<ind;
else cout<<(cm*1.2+cz);
return 0;
}
2,思路2代码
思路2的代码仅供参考,因为我第一次提交的是思路1的代码,ac通过之后不能再次提交,只能自己运行测试用例,我尝试了可能的几个测试点,都没有问题,如果有人在提交后出现部分通拓的,请在评论区留言或者是私信我,回复时间不超过一天。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a,ind;
double cz=0,cm=0,mg=300;
bool flag=1;
for(int i=0; i<12; i++)
{
cin>>a;
if(cz+mg<a)
{
flag=0;
if(ind!=0) ind=ind;
else ind=i+1;
}
else
{
cz+=(300-a);
while(cz>100)
{
cm+=100;
cz-=100;
}
}
}
if(flag==1) cout<<cm*1.2+cz;
else cout<<'-'<<ind;
return 0;
}
相关测试用例图片如下:
自己输入的数据测试也成功👇
四,用例输入输出
用例输入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
有问题请在评论区留言或者是私信我,回复时间不超过一天。