首页 > 其他分享 >信息学奥赛初赛天天练-41-CSP-J2021基础题-n个数取最大、树的边数、递归、递推、深度优先搜索应用

信息学奥赛初赛天天练-41-CSP-J2021基础题-n个数取最大、树的边数、递归、递推、深度优先搜索应用

时间:2024-07-02 10:59:18浏览次数:18  
标签:递归 个数 初赛 41 solve 奥赛 条边 递推 节点

PDF文档公众号回复关键字:20240701

在这里插入图片描述

2021 CSP-J 选择题

单项选择题(共15题,每题2分,共计30分:每题有且仅有一个正确选项)

4.以比较作为基本运算,在N个数中找出最大数,最坏情况下所需要的最少比较次数为

A. N^2

B. N

C. N-1

D. N+1

6.对于有n个顶点、m条边的无向连通图(m>n),需要删掉( )条边才能使其成为一棵树

A. n-1

B. m-n

C. m-n-1

D. m-n+1

12.由 1,1,2,2,3这五个数字组成不同的三位数有( )种

A. 18

B. 15

C. 12

D. 24

13.考虑如下递归算法

solve(n)
	if n<=1 return 1 
	else if n>=5 return n*solve(n-2)
	else return n*solve(n-1)

则调用solve(7)得到的返回结果为( )

A. 105

B. 840

C. 210

D. 420

14.以a为起点,对右边的无向图进行深度优先遍历,则b、c、d、e四个点中有可能作为最后一个遍历的点的个数为( )

A. 1

B. 2

C. 3

D. 4

2 相关知识点

1) n个数取最大

3个数取最大,需比较2次

#include<bits/stdc++.h>
using namespace std;
/*
  3个数取最大 比较2次 
*/ 
int main(){
	int a,b,c ;
	scanf("%d%d%d",&a,&b,&c) ;
	if(b > a)a = b ;
	if(c > a)a = c ;
	printf("%d",a) ;

	return 0;
}
/*
  输入 1 2 3
  输出 3
  输入 9 5 10
  输出 10 
*/ 

n个数取最大,需比较n-1次

#include<bits/stdc++.h>
using namespace std;
/*
  n数进行比较,循环1~n-1,进行n-1次循环 
*/ 
int  n,a[10000];
int main(){
	scanf("%d",&n);
	for(int i=0;i<n;i++){
		scanf("%d",&a[i]);
	}
	
	for(int i=1;i<n;i++){
		if(a[0]<a[i]){
			a[0]=a[i];
		}
	}
	printf("%d",a[0]);

	return 0;
}
/*
  输入 4 5 9 10 8
  输出 10
  输入 3 9 5 10
  输出 10 
*/ 

2) 树的边数

树的边数是指树中所有边的数量。在非空树中,边的数量等于结点数量减1

3) 枚举算法

枚举算法是一种通过列举所有可能情况来求解问题的策略。它通常适用于问题规模较小且解空间明确、有限的情况。枚举算法的关键在于如何有效地遍历解空间,并在遍历过程中判断每个候选解是否满足问题的要求

枚举算法一般需要按一定规则进行分类,避免重复枚举或遗漏的情况

4) 递归、递推

递归

递归是一种解决问题的方法,它通过将问题分解为更小的子问题来解决。

一个递归函数会在其定义中直接或间接地调用自身

递归通常包括两个部分:基本情况(Base case)和递归步骤(Recursive step)。

基本情况是指当问题规模变得足够小时,可以直接得到解决方案的情况。

递推

递推是一种描述序列中项与项之间关系的方法。递推关系通常用于定义具有某种规律性的数列,如斐波那契数列

递推关系可以用一个公式或方程来表示,该公式或方程描述了序列中的每一项如何由前一项(或前几项)计算得出

递归和递推区别

递归是一种解决问题的方法,通过将问题分解为更小的子问题来解决,自上而下分解,通常会出现多次重复计算问题

递推是一种描述序列中项与项之间关系的方法,自底而上计算,避免重复计算

通过斐波那契数列演示区别

递归f(3)重复计算3次,如果数更大重复更多

递推计算是从最底层计算,计算上一层时使用前面的计算结果,所以f(3)只计算1次

5) 深度优先搜索

从某个特定顶点开始,尽可能深地搜索树的分支,直到达到叶子节点,然后回溯到前一个节点,继续搜索下一个分支,实现DFS时,通常使用堆栈数据结构来实现

3 思路分析

4.以比较作为基本运算,在N个数中找出最大数,最坏情况下所需要的最少比较次数为( C )

A. N^2

B. N

C. N-1

D. N+1

分析

比较作为基本运算,用第1个数做基准数,和第2个比较,然后保留最大的,逐一和后面的数进行比较

1和2,2和3,3和4,… n-1和n

最多为n-1次

6.对于有n个顶点、m条边的无向连通图(m>n),需要删掉( D )条边才能使其成为一棵树

A. n-1

B. m-n

C. m-n-1

D. m-n+1

分析

n个节点的树,有n-1条边

无向图有m条边,需要变成n-1条边

应删掉m-(n-1)=m-n+1

所以选D

12.由 1,1,2,2,3这五个数字组成不同的三位数有( A )种

A. 18

B. 15

C. 12

D. 24

分析

分类枚举

1有1 2 3这3个不同数字组成的3位数个数有A(3,3)=3 * 2 *1=6种

2有1 1 2 这3个数字组成的3位数 112 121 211 这3种

3有1 2 2 这3个数字组成的3位数 122 212 221 这3种

4有1 1 3 这3个数字组成的3位数 112 131 311 这3种

5有2 2 3 这3个数字组成的3位数 223 232 322 这3种

上述分5类枚举,根据加法原理

6+3+3+3+3=18

13.考虑如下递归算法

solve(n)
	if n<=1 return 1 
	else if n>=5 return n*solve(n-2)
	else return n*solve(n-1)

则调用solve(7)得到的返回结果为( C )

A. 105

B. 840

C. 210

D. 420

分析

递归从大到小计算会出现一些重复计算,可以从小到大递推得到solve(7)的值
solve(1)=1
solve(2)=n * solve(n-1)=2* solve(1)=2*1=2
solve(3)=n * solve(n-1)=3* solve(2)=3*2=6
solve(4)=n * solve(n-1)=4* solve(3)=4*6=24
solve(5)=n * solve(n-2)=5* solve(3)=5*6=30
solve(6)=n * solve(n-2)=6* solve(4)=6*24=144
solve(7)=n * solve(n-2)=7* solve(5)=7*30=210

14.以a为起点,对右边的无向图进行深度优先遍历,则b、c、d、e四个点中有可能作为最后一个遍历的点的个数为( B )

A. 1

B. 2

C. 3

D. 4

分析

从a点出发沿着一个分支节点尽可能深的搜索树的分支,直到达到叶子节点,然后回溯到前一个节点,继续搜索下一个分支
1 从a出发沿bdce一个分支搜索完所有节点,最后节点为e
2 从a出发沿ce搜索到叶子节点,回溯到c沿db搜结束,最后节点为b
深度优先搜索只有上述2种情况,可能作为最后节点的为e和b这2个节点
具体如下图

标签:递归,个数,初赛,41,solve,奥赛,条边,递推,节点
From: https://blog.csdn.net/ya888g/article/details/140110926

相关文章

  • 41、k8s-数据存储-基本存储-NFS(网路文件存储系统)
    HostPath可以解决数据持久化的问题、但是一旦node节点故障了、pod如果转移到别的节点、又会出现问题、此时需要准备单独的网络存储系统、比较常用的有:·NFS·CIFSNFS是一个网络问卷存储系统、可以搭建一台NFS服务器、然后将pod中的存储直接连接到NFS系统上、这样的话......
  • 信息学奥赛一本通C++版 1081:分苹果 答案
    目录【链接】【题目描述】【输入】【输出】【输入样例】【输出样例】【答案】【链接】1081:分苹果1081:分苹果【题目描述】把一堆苹果分给n个小朋友,要使每个人都能拿到苹果,而且每个人拿到的苹果数都不同的话,这堆苹果至少应该有多少个?【输入】一个不大于1000的......
  • 奥赛一本通C++版 1057解题思路(附加答案)
    链接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1057题目:解题思路:先定义两个整型变量a和b,一个字符变量c,依次输入a,b,c。接着判断输入的运算符号是否等于+ || - || * || /(注意,这里的符号用单引号括起来)。如果运算符号等于加号,则进行加法运算,把a和b相加,......
  • 141个图表,完美展示数据分类别关系!
    本文介绍使用Python工具seaborn详细实现分类关系图表,包含8类图141个代码模版。分类关系图表用于展示数字变量和一个或多个分类变量之间的关系,可以进一步分为:箱形图(boxplot)、增强箱形图(enhancedboxplot)、小提琴图(violinplot)、抖动散点图(jitterplot)、蜂群图(beeswarmplot)、......
  • 41、linux-yum源管理-阿里云仓库配置
    ·yum的管理1、清理原有的yum配置·把本地或者官方的/etc/yum.repos.d/路径下的所有repo配置文件移走·确保/etc/yum.repos.d/这里没有其它文件2、下载配置阿里巴巴开源镜像站官网配置:https://developer.aliyun.com/mirror/·在这个位置/e......
  • [题解]CF1741D Masha and a Beautiful Tree
    思路我们可以观察样例,不难发现:对于任意一段长度为\(2^k\)的区间中,如果最大值减最小值加\(1\)等于此区间的长度,那么一定有解。因为,我们的目标是使整个序列升序排列。因此,我们在一个区间内的最大值减最小值加\(1\)与区间长度是相等的。所以,我们可以用上述结论为判断无解的......
  • [题解]CF1741B Funny Permutation
    思路简单构造题,我们可以分为三种情况进行构造。\(n=3\)时,一定无解,输出-1。(你可以试试)\(n\bmod2=1\wedgen\neq3\)时,我们直接先输出\(n,n-1\),然后顺序输出即可。证明:令\(a\)为最后构造出的序列。那么,\(a_1=n,a_2=n-1,a_i=i-2(3\leqi\leq......
  • 【TWVRP】遗传算法求解带时间窗的载重约束外卖配送车辆路径规划问题【含Matlab源码 14
    ......
  • 黑盾杯本科组初赛2024
    就出了misc和crypto,其他方向是一个没出啊啊啊啊锐评:sb密码crypto学会sm我的进制我做主直接-'a'输出看一下,只有0-17,猜测18进制a="ergdgjboglfpgcbpbofmgafhfngpfoflfpfkgjgccndcfqfpgcgofofpdadadagr"b=[]c=set()foriina:x=ord(i)-ord('a')c.add(x)b......
  • C++题解(1) 信息学奥赛一本通 1003:对齐输出 洛谷 B2004:对齐输出 土豆编程 T1003:对
    【题目描述】读入三个整数,按每个整数占8个字符的宽度,右对齐输出它们,按照格式要求依次输出三个整数,之间以一个空格分开。【输入】只有一行,包含三个整数,整数之间以一个空格分开。【输出】只有一行,按照格式要求依次输出三个整数,之间以一个空格分开。【输入样例】......