ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2020-07-02 11:08:31  阅读:270  来源: 互联网

标签:题目 函数 童鞋 int HZNU2010 递归 ans return 刷题


传送门

题意: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] = {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\n", 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\n", ans(n));
12     }
13     return 0;
14 }

(文末bb:本来出的是hznu1684 的一个结构体排序的题目(我自认为是灰常简单的),可是我们的单总一再提醒我们给你们找一些舒适宜人的题目,让你们都能有参与感。所以这才出现了末题是简单数组应用的情况。如果有人对前面1684的题目感兴趣,可以看我的博客(早就写好了,又被迫改了题目又写了一篇)https://blog.csdn.net/m0_46187157/article/details/107032453。奔涌吧,后浪!

标签:题目,函数,童鞋,int,HZNU2010,递归,ans,return,刷题
来源: https://www.cnblogs.com/0424lrn/p/13223319.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有