其他分享
首页 > 其他分享> > HZNU2010(献给我们还在努力刷题的童鞋)

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] = {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