题解

采花生

题目描述:

给定一个矩形的范围,其中埋有花生,问在时间为k的限制中,最多能够采到多少花生,输出花生数;如果采不到,就输出0

分析:

其实,这就是一道模拟类的题。先找出最大值,然后进行第一次判断,判断采完后能否回去,即判断2*x+1是否大于k,若第一次判断时大于k,则输出0,并且return 0,因为他摘不到花生。若小于,则计数器sum累加当前花生数,并将a[x][y]=0,记录当前的xynowx=x,nowy=yk减去(x-1)。然后再次执行上述操作,直到k<=0

代码如下:

#include<bits/stdc++.h>

using namespace std;

int m,n,k,maxx=-1111111,a[100][100];

int time1,time2,sum=0,x,y,nowx,nowy;

void formax()//此处寻找最大值

{

maxx=0;//注意:这条语句必加,否则将找不到第二个最大值

for(int i=1;i<=m;i++)

 for(int j=1;j<=n;j++)

  if(maxx<a[i][j])

  {

   maxx=a[i][j];

   x=i;//记录下当前的位置

   y=j;

  }

}

int main()

{

freopen("108.in","r",stdin);

freopen("108.out","w",stdout);

cin>>m>>n>>k;

for(int i=1;i<=m;i++)

 for(int j=1;j<=n;j++)

  cin>>a[i][j];

formax();

if(2*x+1<=k)//第一次判断,需要进行特殊处理

{

sum+=a[x][y];//累加花生数

a[x][y]=0;

nowx=x;//记录下第一次的位置

nowy=y;

k=k-x-1;//用总时间减去所要采花生的时间及回来的时间

}

else

{

cout<<0<<endl;//如果采不到花生就输出0,结束程序

return 0;

}

while(k>0)

{

time1=abs(nowx-x)+abs(nowy-y);//记录走到第二个点需要的时间

time2=x+1;//记下返回的时间

if(time1+time2>k) break;//判断能否返回

sum=sum+maxx;

a[x][y]=0;

nowx=x;

nowy=y;

k=k-time1-1;

}

cout<<sum<<endl;

return 0;

}

 

津津的储蓄计划

题目描述:每个月初,妈妈都会给津津300元的零花钱,妈妈提出,可以将整百的钱存在她那里,年末,妈妈会加上20%还给她。所以只要津津预计到这个月剩下的钱超过100元时,她就会把整百的钱给妈妈,剩下的留在自己手里。但是存在妈妈那里的钱不能提前取出,所以就有可能在某个月的月初,津津手上的钱加上妈妈给的钱不过这个月的预计花销。现在请你根据某年1月到12月每个月津津的预算,判断会不会出现这种情况。如果不会,计算到某年年末,妈妈将津津平常存的钱加上20%还给津津之后,津津手中会有多少钱。如果会,则输出第一个出现这样情况的月份的相反数。

分析:

模拟题,设置一个数组,记录每个月的预计费用,并且设置一个变量,记录津津现在手上的钱,循环,每次都应加上妈妈给的300元然后减去这个月的开支,若减完后为负数,就说明会出现这样的情况,应该输出对应月份的相反数。若减完后所剩大于100,则累加整百的钱数,剩下的钱留下,再进行计算。若12个月后还未出现钱不够的现象,则输出存在妈妈那里的钱的1.2倍。

代码如下:

#include<bits/stdc++.h>

using namespace std;

int main()

{

int s=0,a[100],ans=0;

for(int i=1;i<=12;i++)//读入12个月的预计支出

 cin>>a[i];

for(int i=1;i<=12;i++)

 {

 s=s+300-a[i];//记录现在剩下的钱

  if(s<0)//如果剩下的钱小于0,就输出对应月份的相反数

   {

    cout<<-i<<endl;

    return 0;

   }

   else

   {

    ans=ans+s/100*100;//记录存在妈妈那的钱的总数

    s=s%100;//津津所剩下的钱

   }

 }

 cout<<s+ans*1.2<<endl;//将津津得到的钱加上所剩的钱输出

 return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值