首页 > 其他分享 >暴力枚举--津津的储蓄计划

暴力枚举--津津的储蓄计划

时间:2022-10-08 00:11:44浏览次数:47  
标签:200 int -- 300 津津 枚举 save Left

题目描述

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

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

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

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

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

输入格式

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

输出格式

一个整数。如果储蓄计划实施过程中出现某个月钱不够用的情况,输出-X,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 #include<stdio.h>
 3 int main()
 4 {
 5     int Pay[13]={0},Left[13]={0},i,F,save=0,sum=0;
 6     for(i=1;i<13;i++)
 7     scanf("%d",&Pay[i]);//Pay数组储存每个月津津的花销
 8     for(i=1;i<13;i++){
 9         F=300+Left[i-1]-Pay[i];//计算每个月月初津津拥有的零花钱
10         if(F>=100&&F<200){
11             save=100;//代表本月份可储存的金额
12             Left[i]=300+Left[i-1]-Pay[i]-save;//Left数组储存本月剩余的零花钱金额
13         }//津津手中拥有的零花钱在满足预算的基础上储存的零花钱金额,以此分情况讨论
14         else if(F>=200&&F<300) {
15             save=200;
16             Left[i]=300+Left[i-1]-Pay[i]-save;
17         }
18             else if(F>=300){
19                 save=300;
20                 Left[i]=300+Left[i-1]-Pay[i]-save;
21             }
22                 else{
23                     save=0;
24                     Left[i]=300+Left[i-1]-Pay[i];    
25                 }
26         if((300+Left[i-1])<Pay[i]) break;//若津津月初手中的零花钱总数不足本月花销,即刻退出循环,i记录月份
27         sum+=save;//sum记录储存零花钱总数
28     }//暴力枚举,每个月依次进行
29     int s=sum+sum*0.2+Left[12];//勿忘12月份末的零花钱余额
30     if(i==13) printf("%d",s);
31     else printf("-%d",i);
32     return 0;
33 }
 1 网上简便源程序代码:
 2 #include <stdio.h>
 3 
 4 int main()
 5 {
 6     int g,a,b,c=0,d,r,m=0,n=0,h;
 7     double l,q,x,y,v;
 8     for(a=1;a<=12;a++){
 9     scanf("%d",&g);
10     h=300-g+c;
11     if(h<0){
12         printf("-%d",a);
13         return 0;
14     }
15     b=h/100;
16     c=h%100;
17     m=m+b;
18     }
19     m*=120;m+=c;
20     printf("%d",m);    
21 }
 1 通过网上学习,优化初步代码,得到自己的代码:
 2 #include<stdio.h>
 3 int main()
 4 {
 5     int Pay[13]={0},Left[13]={0},i,F,save=0,sum=0;
 6     for(i=1;i<13;i++)
 7     scanf("%d",&Pay[i]);
 8     for(i=1;i<13;i++){
 9         F=300+Left[i-1]-Pay[i];
10         Left[i]=F%100;//通过取余操作,一步确定每个月零花钱的余额;同时包含的相较之前更加丰富 
11         save=F-Left[i];
12         sum+=save;
13         if(F<0) {
14             printf("-%d",i);
15             break;
16         }
17     }
18     int s=sum+sum*0.2+Left[12];
19     if(i==13) printf("%d",s);
20     return 0;
21 }

 

本题的标签是暴力枚举,至于暴力枚举算法的详细知识内容,这里不在说明,通过本题也能深刻体会到,最大的感悟之处也莫过于此。读题->思考->代码实现->调试,整个过程是最传统的做题过程,如果出错的话,拿出笔和纸张按照代码自己模拟走一遍查出问题所在。

标签:200,int,--,300,津津,枚举,save,Left
From: https://www.cnblogs.com/wangyongxia-BK/p/16767558.html

相关文章

  • 浅析package.json 和 package-lock.json的区别
    一package.json中的版本符号{"react":"^18.2.0","react-dom":"~18.2.0""react-refresh":"0.11.0",}插入符号^18.2.0:匹配18.X.X的最新版本。波浪符号~1......
  • ssm第一天学习
    SSM·IOC·AOP初识Spring:Spring全家桶SpringFramework底层框架,设计性框架SpringBoot加速开发,提高开发速度SpringCloud分布式开发 SpringFramework系统......
  • js读取文件内容
    原理是,FileReader对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用File或Blob对象指定要读取的文件或数据。其中File对象可以是来自......
  • web 框架的本质
    web框架的本质——通俗的说,web框架封装了socket、数据库操作、路由分发、模板配置等,留给我们现成的接口,让我们更专注业务逻辑本身。一个简单的web示例importsocket#......
  • 一个公益网站
    地址好东西挺多的,可下载较多资源https://downloads.freemdict.com/截图分类太多,请自行前往查看......
  • 异常处理和模块
    一、异常(一)什么是异常异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。一般情况下,在python无法正常处理程序时就会发生一个异常。异常python对象......
  • 3.PIC16F877驱动LCD1602
    1.LCD1602的读写时序手头上的模块是酱紫的 对应的头文件代码(在PIC16F877上用的)/***********USERFUNCTIONS***********1.Lcd8_Init()......
  • linux引导和服务
    一、引导过程引导过程总览1.1开机自检服务器主机开机以后,将根据主板BIOS中的设置对CPU、内存、显卡、键盘等设备进行初步检测,检测成功后根据预设的启动顺序移交系统控......
  • Java Agent到内存马(一)
    目录关于JavaAgent介绍使用方式premainagentmain方式参考关于JavaAgent介绍在jdk1.5之后引入了java.lang.instrument包,该包提供了检测java程序的Api,比如用于......
  • 求最大公约数伪代码
    1.辗转相除法,又名欧几里德算法(Euclideanalgorithm),是求最大公约数的一种方法。它的具体做法是:用较大数除以较小数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)......