• HZNU2010(献给我们还在努力刷题的童鞋)


    传送门

    题意:emmmm,好像也没办法再解释了什么了,题目本来就是中文,没读懂的童鞋可以多读几遍。

    题解: 题目都指明是用数组了,只要开一个范围合适的数组,给定开头三个值,然后通过for循环将后续对应的值一一求出就可以了。

    (被迫继续营业)这道题用数组求解总应该可以理解吧,然后再赘述一下为什么是  a[i]=a[i-1]*2-a[i-3];题目里的猪猪们繁殖周期都非常的短,出生后的第二天就能繁殖,又因为全是母猪(至于为什么没有公猪和没有公猪要怎么繁殖的问题,就,,挺好玩的不是吗。),所以不管那一天有几头老猪几头小猪,第二天都一视同仁具有生崽能力,因此第i天出生的猪仔数量就是前一天猪的总量,即:i出生 = a[i-1]。但同时,生下第二头猪的猪妈妈会被杀掉,所以我们在计算的时候要减去这一部分的值,问题就在,要杀的猪妈有多少。第i天要杀的猪妈,其实在第i-2天才刚出生,而第i-1天出生的猪仔等于第i-3天的猪总量,即:i杀 = a[i-3]。所以第i天的猪总量 = 第i天的猪总量 + 第i天出生的猪仔数量 - 第i天需要杀掉的猪妈数量。综上所述(有点高中答题的赶脚): a[i] = a[i-1]*2 - a[i-3]。

    然后题目就明了吧,还不明了?对,数组,for循环,从头求到尾就行了。这样就应该能做了吧,不是不行?文字解释看不懂?苦笑.JPG,作为一个廉价劳动力的卑微助教,我还录了视频,,,简直公开处刑好吧。消化不良的童鞋可以博客配合视频一起食用。如果,如果这样以后还有疑问,第二天机房见(强颜欢笑.JPG)。

     1 #include<stdio.h>
     2 int main(){
     3     int t, n;
     4     scanf("%d",&t);
     5     int a[20] = {0,1,2,3};
     6     for(int i=4;i<20;i++)
     7         a[i]=a[i-1]*2-a[i-3];
     8     while(t--){
     9         scanf("%d", &n);
    10         printf("%d
    ", a[n]);
    11     }
    12     return 0;
    13 }

    (我又回来了)这种有明显规律的数组求解,也可以用函数的方法来解决。什么是函数?emm, main()就是一个函数,自定义函数是我们为了完成某项任务而编写的,是为了求解第i天的猪的数量,同时也有让主程序更简洁的功能(当然原代码已经足够简洁了)。函数在这里应该怎么用?递归,我们可以通过递归的方法,求出题目要求的值。什么是是递归?哇这,在我看来,递归就是“套娃”。

    1 int ans(){
    2  
    3     return ans();
    4 } 

    ans函数中再次调用ans函数, 这不就是套娃吗,口误,是递归。那这个递归具体应该怎么用呢?上面已经分析过第i天的猪数量怎么求了,那么同理,ans(i)表示求得第i天的猪的数量,那函数里就应该是 return 2*ans(i-1) - ans(i-3);然后呢,如果你就这样写这个函数,然后运行,你会发现你得不到任何东西。我递归了个寂寞?实际上,这个函数他跳不出他的递归了,每次都继续调用函数,却没人告诉它应该在什么时候结束。所以,禁止套娃!

    不是,其实再给他一些指令就好了,比如说i==1时,返回1(第一天猪的数量就是1嘛)。因为函数调用中,包含一个ans(i-3) ,我们为了防止函数因为套娃行径把i一直套到负数,所以我们应该告诉它:i==1时,返回1;i==2时,返回2;i==3时,返回3.这样,函数就能正常调用了。

     1 #include<stdio.h>
     2 int ans(int n){
     3     if(n==1 || n==2 || n==3)    return n;    
     4     return 2*ans(n-1) - ans(n-3);
     5 } 
     6 int main(){
     7     int t, n;
     8     scanf("%d", &t);
     9     while(t--){
    10         scanf("%d", &n);
    11         printf("%d
    ", ans(n));
    12     }
    13     return 0;
    14 }

    (文末bb:本来出的是hznu1684 的一个结构体排序的题目,反复斟酌以后又换了个题目(如果有人对前面1684的题目感兴趣,可以看我的博客(早就写好了,又被迫改了题目又写了一篇)https://blog.csdn.net/m0_46187157/article/details/107032453

  • 相关阅读:
    mybatis中resultMap配置细则
    关于mybatis中typeHandler的两个案例
    mybatis映射器配置细则
    mybatis常用配置
    初识mybatis(二)
    初识mybatis
    数值优化(Numerical Optimization)学习系列-无梯度优化(Derivative-Free Optimization)
    交替方向乘子法(ADMM)的原理和流程的白话总结
    用ADMM求解大型机器学习问题
    数值优化(Numerical Optimization)学习系列-目录
  • 原文地址:https://www.cnblogs.com/0424lrn/p/13223319.html
Copyright © 2020-2023  润新知