ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

蓝桥杯世界赛b题网站扩张c++/c实现

2021-11-20 16:30:51  阅读:138  来源: 互联网

标签:七天 推广 递归 网站 代码 c++ 出口 蓝桥 int


网站扩张

题目

在这里插入图片描述
在这里插入图片描述

题目分析

本题,是一个典型的递归类问题,递归类问题,可以使用递归函数来解决,参照斐波那契数列的写法,可以仿写出来(初学者而言)
对于参赛选手的我们要学会分析问题,并将其转化为代码语言,代码量很少,难在思维,如果同学们可以理解并掌握思维方法,那么在少的代码量和好的代码风格将是得分的利器。

话不多说,正式开始分析,本题。
我们从题目可以知道,当天数也就是n小于或等于7天是,发展的人数只有一人,同样新推广出来的人也必须要超过七天才可以推广新的人,那么我们对天数进行分析,如果从推广第一个人开始,推广天数少于7天,那么就只有一个人,这便是递归的出口!

if (n<=7)
	return 1;

以上代码便是出口的定义,切记递归函数一定有出口!

在这里插入图片描述
递归的危害,一旦递归使用的量级过大,会占用极大的系统资源,上图是递归一个量级偏大的数,所占用的内存和cpu资源都是如此,所以,如果没有定义出口,递归就会一直进行下去,其产生的后果将难以估计。慎用递归,但是一定要会合理的使用递归。

出口找到后,就要开始分析出递推公式,递推公式有那些成分?
取决于所面临的问题,也就是对应的方法,推广有两个条件,新人有7天的观察期,七天过后每三天就可以推广一个人,大于七天少于11天最少也是两个人。
对公式进行描述,假设总推广日期大于7天,那么人员组成就成了,过了七天之后,推广的第一个人,他自己和他推广的人,还有就是总天数减三天,来看看是不是还大于7天,如果大于七天,就要返回这个人和这个人推广的人数,少于七天,则会触发递归出口(初始推广者就是这次触发出口而加的人),那么大于七小于11天就是第八天推广的人和自己两个人。
对上述进行代码语言描述:

int f(int n){
	if(n<=7)
		return 1;
	else
		return f(n-7)+f(n-3);
}

实现递归函数之后,这次的题目也就游刃而解了

完整代码:

#include <iostream>
using namespace std;


int print(int n){
    if(n<=7)
        return 1;
    else
        return print(n-7)+print(n-3);
}

int main()
{
    int n;
	
    cin>>n;
	
    cout<<print(n)<<endl;
}

标签:七天,推广,递归,网站,代码,c++,出口,蓝桥,int
来源: https://blog.csdn.net/niko02/article/details/121440420

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

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

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

ICode9版权所有