青少年软件编程(202209)(C语言)(枚举&递归&递推)等级考试(三级)试题及参考答案

算法练习——吃糖 算法练习——吃糖果问题(C++源码) 阅读详情

等级标准

  1. 掌握算法以及算法性能、算法效率的概念;
  2. 掌握基本算法中枚举的概念;
  3. 掌握基本算法中递归的概念;
  4. 掌握自调用函数的应用,实现基本算法中的递归方法;
  5. 掌握基本算法中由递归变递推的方法;
  6. 能够使用上述方法编写指定功能的正确完整的程序。

1.课程冲突

考试题目

小 A 修了 n 门课程, 第 i 门课程是从第 ai 天一直上到第 bi 天。
定义两门课程的冲突程度为 : 有几天是这两门课程都要上的。
例如 a1=1,b1=3,a2=2,b2=4 时, 这两门课的冲突程度为 2。
现在你需要求的是这 n 门课中冲突程度最大的两门课的冲突程度。

时间限制:1000
内存限制:65536

输入
第一行一个正整数 n 表示课程数量。 接下来 n 行,每行两个正整数 ai,bi。 2 ≤ n≤ 1000, 1 ≤ ai ≤ bi ≤ 1000。

输出
输出一个整数表示最大的冲突程度

样例输入
3
1 3
2 4
5 5

样例输出
2

参考答案

#include <bits/stdc++.h>
using namespace std;

//#define PPYDEBUG

struct lesson{
	int no; //课程编号
	int a;  //课程开始a天
	int b;  //课程结束b天
};

int max_chongtu(lesson x, lesson y){
	int r = min(x.b, y.b) - max(x.a, y.a) + 1;
	if(r < 0){
		r = 0;
	}
#ifdef PPYDEBUG
	printf("%d = x[%d,%d] - y[%d,%d]\n", r, x.a, x.b, y.a, y.b);
#endif
	return r;
}

int main() {
#ifdef LOCAL
	freopen("202209_3_1.in", "r", stdin);
#endif
	int n;
	scanf("%d", &n);
	
	lesson le[1010];
	
	for(int i = 0; i < n; i++){
		le[i].no = i + 1;
		scanf("%d%d", &le[i].a, &le[i].b);
	}

	int r = 0;
	for(int i = 0; i < n; i++){
		for(int j = i + 1; j < n; j++){
			r = max(r, max_chongtu(le[i], le[j]));
		}
	}
	
	printf("%d", r);
	
	return 0;
}

2.42点

考试题目

42是:
·组合数学上的第5个卡特兰数
·字符’'的ASCII码
·钼的原子序数
·6与9的乘积结果的13进制表示
·生命、宇宙以及任何事情的终极答案
·以及……表达式(1+5)/2
(6-4)7的值
因此,小机器人Marvin发明了这个叫42点的小游戏。在这个游戏中,玩家会获得n个数。玩家需要使用’+‘、’-‘、’
‘、’/‘、’(‘、’)'以及这n个数构成一个合法的中缀表达式,并使得该表达式的值为42。n个数之间的顺序可以改变。表达式运算过程中只能出现整数。
由于过于抑郁,Marvin无力完成这个游戏,于是来找你帮忙。你的任务是对于给定的n个数,判断他们是否能根据上述游戏规则算出42。

时间限制:1000
内存限制:65536

输入
第一行为一个数n,1<=n<=6。 第二行为n个数,每个数均为[1,13]范围内的整数。

输出
输出一行,若可以算出42则输出“YES”,否则输出“NO”(注意大小写)。

样例输入
6
1 5 2 6 4 7

样例输出
YES

参考答案

#include <bits/stdc++.h>
using namespace std;

#define PPYDEBUG
 
bool dfs(int a[], int n){
    if(n == 1){
        return a[0] == 42;
    }
    
    for(int i = 0; i < n; i++){
        for(int j = i + 1; j < n; j++){
        	//b[]数组为a[]数组去掉a[i]和a[j]后形成的新数组
            int b[10];
            int m = 0;
            for(int k = 0; k < n; k++){
                if(k == i || k == j) continue;
                b[m] = a[k];
                m++;
            }
            //最后一位等于去掉的a[i]和a[j]之间的加减乘除结果
            //此时m = n - 2
            
#ifdef PPYDEBUG
			printf("n[%d], m[%d]\n", n, m);
#endif
            b[m] = a[i]+a[j]; if(dfs(b, m + 1)) return 1;
            b[m] = a[i]-a[j]; if(dfs(b, m + 1)) return 1;
            b[m] = a[j]-a[i]; if(dfs(b, m + 1)) return 1;
            b[m] = a[i]*a[j]; if(dfs(b, m + 1)) return 1;
            if(a[i] != 0) b[m] = a[j]/a[i]; if(dfs(b, m + 1)) return 1;
            if(a[j] != 0) b[m] = a[i]/a[j]; if(dfs(b, m + 1)) return 1;
        }
    }
    return 0;
}
 
int main(){
#ifdef LOCAL
	freopen("20221107_0503.in", "r", stdin);
#endif
    int n;
    int a[10];
    cin >> n;
    for(int i = 0; i < n; i++) cin >> a[i];
    if(dfs(a, n)) cout << "YES" << endl;
    else cout << "NO" << endl;
    return 0;
}

3.最长下坡

考试题目

小明天天沿着未名湖环湖路跑,有时候也觉得蛮累。
累的时候跑下坡就很开心。小明想知道最长的一段下坡有多长。
环湖路是个圆形,周长n米。每隔一米测一下路面高度,两个测高点之间的高度是单调变化或不变的。
问最长的一段下坡有多少米长。小明只能顺时针跑。下坡必须高度单调减少。
时间限制:1000
内存限制:65536

输入
第一行是整数n,表示环湖路一共n米长(2<=n<=100)。 第二行是n个整数,每个整数范围[0,10000],按顺时针顺序给出了n个测高点的高度
输出
最长下坡路段的长度

样例输入
样例输入1:
5
2 1 5 6 3
样例输入2:
5
2 1 5 4 3
样例输入3:
4
1 1 1 1

样例输出
样例输出1:
3
样例输出2
4
样例输出3
0

提示
这是个简单枚举题,枚举起点即可

参考答案

#include <bits/stdc++.h>
using namespace std;

int main() {
#ifdef LOCAL
	freopen("202209_3_3.in", "r", stdin);
#endif
	int n;
	scanf("%d", &n);
	
	int a[200];
	for(int i = 0; i < n; i++){
		scanf("%d", &a[i]);
	}
	
	//这题有个坑,就是<环湖>
	for(int i = 0; i < n; i++){
		a[n + i] = a[i];
	}
	
	int dp[200];
	dp[0] = 0;
	int dp_max = 0;
	for(int i = 1; i < 2 * n; i++){
		if(a[i] <= a[i - 1]){
			dp[i] = dp[i - 1] + 1;
		}else{
			dp[i] = 0;
		}
		dp_max = max(dp_max, dp[i]);
	}	
	printf("%d", dp_max);
	
	return 0;
}

4.吃糖果

考试题目

现有n(20 > n > 0)个糖果,每天可以吃1个,也可以每天吃2个,也可以每天吃3个,请计算共有多少种不同的吃法。

时间限制:1000
内存限制:65536

输入
输入的每一行包括一组测试数据,即为糖果数n。最后一行为0,表示测试结束。

输出
每一行输出对应一行输入的结果,即为吃法的数目。

样例输入
1
2
3
4
0

样例输出
1
2
4
7

参考答案

#include <bits/stdc++.h>
using namespace std;

int main() {
#ifdef LOCAL
	freopen("202209_3_4.in", "r", stdin);
#endif
	int dp[30];
	dp[0] = 1;
	dp[1] = 2;
	dp[2] = 4;//111,12,21,3
	
	for(int i = 3; i < 20; i++){
		dp[i] = dp[i - 3] + dp[i - 2] + dp[i - 1];
	}

	int n;
	do{
		scanf("%d", &n);
		//printf("%d\n", n);
		if(n == 0){
			break;
		}
		printf("%d\n", dp[n - 1]);
	}while(true);
	
	return 0;
}

5.放苹果

考试题目

把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。

时间限制:1000
内存限制:65536

输入
第一行是测试数据的数目t(0 <= t <= 20)。以下每行均包含二个整数M和N,以空格分开。1<=M,N<=10。

输出
对输入的每组数据M和N,用一行输出相应的K。

样例输入
1
7 3

样例输出
8

解题思路

将这8组数分成2组
第一组,可以发现最后一个数总是为0,其实可以理解成这一组数与m = 7,n = 2也是相等的
7 0 0
6 1 0
5 2 0
4 3 0

第二组,如果将每一个数都减1,可以发现,这组数的个数与m = 4,n = 3相等
5 1 1
4 2 1
3 3 1
3 2 1

参考答案

#include <bits/stdc++.h>
using namespace std;

int dp(int m, int n){
    if(m == 0 or n == 1){
        //如果,碟子只有1个,无论苹果有多少个都只有一种放法
        return 1;
    }
    if(n > m){
	   //如果,碟子的个数大于苹果的个数
        return dp(m, m);
    }else{
        return dp(m, n - 1) + dp(m - n, n);
	}
}

int main() {
#ifdef LOCAL
	freopen("202209_3_5.in", "r", stdin);
#endif
	int t;
	scanf("%d", &t);
	
	int n, m;
	for(int i = 0; i < t; i++){
		scanf("%d%d", &m, &n);
		printf("%d", dp(m, n));
	}
				
	return 0;
}
2021-09 青少年软件编程(C语言)等级考试试卷(三级)解析 阅读详情

相关推荐

2022年09月 C/C++(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

小 A 修了 n 门课程, 第 i 门课程是从第 ai 天一直上到第 bi 天。定义两门课程的冲突程度为 : 有几天是这两门课程都要上的。例如 a1=1,b1=3,a2=2,b2=4 时, 这两门课的冲突程度为 2。现在你需要求的是这 n 门课中冲突程度最大的两门课的冲突程度。时间限制:1000内存限制:65536第一行一个正整数 n 表示课程数量。接下来 n 行,每行两个正整数 ai,bi。输出一个整数表示最大的冲突程度。

人生就是一个不断学习的过程 1736

问题 A: 吃糖果(递归练习)

题目描述 名名的妈妈从外地出差回来,带了一盒好吃又精美的巧克力给名名(盒内共有 N 块巧克力,20 &gt; N &gt;0)。 妈妈告诉名名每天可以吃一块或者两块巧克力。 假设名名每天都吃巧克力,问名名共有多少种不同的吃完巧克力的方案。 例如: 如果N=1,则名名第1天就吃掉它,共有1种方案; 如果N=2,则名名可以第1天吃1块,第2天吃1块,也可以第1天吃2块,共有2种方案; 如果N=3,则名名第1天可以吃1块,剩2块,也可以第1天吃2块剩1块,所以名名共有2+1=3种方案; 如果N=4,则名名可以第1

qq_45439980的博客 745

电子学会C/C++编程等级考试2022年09月(三级)真题解析

玩家需要使用'+'、'-'、'*'、'/'、'('、')'以及这n个数构成一个合法的中缀表达式,并使得该表达式的值为42。第二行是n个整数,每个整数范围[0,10000],按顺时针顺序给出了n个测高点的高度。(用K表示)5,1,1和1,5,1 是同一种分法。现有n(20 > n > 0)个糖果,每天可以吃1个,也可以每天吃2个,也可以每天吃3个,请计算共有多少种不同的吃法。1

人生就是一个不断学习的过程 1689

c 世界上最长的下坡

第一行是整数n,表示环湖路一共n米长(2

逆风笑的博客 1008

关于MOS管栅极和栅介质(氧化物)的材料选择

大概解释了高K材料作为栅介质的好处,以及为什么会带来好处,同时引出了金属栅的优点,总结了使用高K材料和金属栅的原因。

qq_52054477的博客 1万+

AT91SAM9260搭建LINUX操作系统

一、 编写目的 2 二、 系统搭建 2 1. 下载相关软件包 2 2. Bootstrap编译 3 3. U-BOOT编译 5 4. LINUX编译 7 5. 通过U-BOOT的TFTP命令从TFTP服务器下载系统镜像 9 6. 文件系统制作 10 7. 挂载NFS作为根文件系统 10 三、 总结 14 一、编写目的 本文档用于记录AT91SAM9260 LINUX学

lshiceman的专栏 7413

电子学会 全国青少年软件编程等级考试(三级--八级)

电子学会 全国青少年软件编程等级考试(三级--八级)

青少年趣味编程 5030

【深大算法设计与分析】实验六 最大流应用问题(棒球赛问题) 实验报告 附代码、数据集

【内附代码与数据集】【深大算法设计与分析】实验六 最大流应用问题(棒球赛问题)

m0_74268508的博客 1293

1193_吃糖果(递推)

1193_吃糖果(递推) 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 5730 通过数: 4559 【题目描述】 名名的妈妈从外地出差回来,带了一盒好吃又精美的巧克力给名名(盒内共有 N 块巧克力,0&lt;N&lt;20)。妈妈告诉名名每天可以吃一块或者两块巧克力。假设名名每天都吃巧克力,问名名共有多少种不同的吃完巧克力的方案。例如:如果N=1,则...

weixin_46523181的博客 904

手把手教你用WKT文件在Petrel中创建自定义坐标系统(附CGCS2000转换模板)

本文详细介绍了如何在Petrel软件中利用WKT文件创建自定义坐标系统,并重点提供了CGCS2000坐标系的完整转换模板与实战步骤。通过解析坐标系统的三大支柱(大地坐标系、投影坐标系、基准转换)和WKT文件结构,指导用户从零开始构建适用于本土化项目的坐标系统,确保地质建模与空间数据处理的精度与一致性。

gpt4scribbler的博客 279

智能体评测技术与实践:从评估维度到DeepEval实战指南

智能体评测技术与实践:从评估维度到DeepEval实战指南 本文系统探讨了AI智能体的评测体系与实践方法。首先从四个关键维度构建评估框架:基础能力(意图理解、知识完整性)、复杂任务(多轮对话、动态工作流)、可靠性(幻觉抑制、安全合规)以及工具效率(参数填充、多工具协同)。其次分析了主流评测工具,包括xBench的动态双轨评估、DeepEval的全链路监控等解决方案。最后详细介绍了DeepEval的实战应用,涵盖环境配置、测试用例构建、指标配置及CI/CD集成,展示了如何通过代码化评估实现智能体质量的持续提升

Linda的自动化测试之旅 3419

202312C语言3级真题

现有n(50 > n > 0)个糖果,每天只能吃2个或者3个,请计算共有多少种不同的吃法吃完糖果。输入的每一行包括一组测试数据,即为糖果数n。最后一行为0,表示测试结束。每一行输出对应一行输入的结果,即为吃法的数目。内存限制:65536。

ybq_sc的博客 919

【11】科曼医疗——科曼医疗 嵌入式--面试,校招,面试问答记录

科曼医疗嵌入式校招面试记录:3位面试官分别考察应用层技术、底层技术和HR面。技术问题涵盖C++特性(多态、虚函数、指针与引用区别)、内存管理(malloc与new对比)、嵌入式基础(51最小系统、IIC/SPI协议)及项目经验(智能黑板擦专利项目)。同时考察了Linux使用经验、STM32开发及嵌入式操作系统认知。最后环节应聘者询问了开发环境及面试流程。面试内容全面覆盖嵌入式开发核心知识点。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 1251

字节跳动2022秋招研发笔试题(4)--及格如此简单

时间限制: C/C++ 1秒,其他语言2秒 空间限制: C/C++ 32768K,其他语言 65536K 题目描述: 为了响应国家全面发展的响应,学校提供了"德、智"、“体”、"美、"劳"等多门课程供同学们选择学习。 每位同学必修3门课程,可选修其他3门及以上课程。 小A同学选了n门选修课程,马上要期末考核了,请你帮小A同学算一算,如果小A同学要及格的话,他所学所有课程的成绩共有多少种组合的方式。 注意: 1、同学的所有学习课程的平均分&gt;=60分即为及格 2、每门课程满分100分,只有2.

江七 1616

Qwen2-VL出现RuntimeError: CUDA error: too many resources requested for launch CUDA kernel errors的解决方案

本文主要介绍了Qwen2-VL出现RuntimeError: CUDA error: too many resources requested for launch CUDA kernel errors的解决方案,希望能对使用Qwen2-VL的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 13万+

【自适应滤波】自适应UKF,基于新息自适应调节Q和R,场景为雷达跟踪与滤波、MATLAB实现

本文提出了一种基于新息协方差匹配的自适应UKF(CM-AUKF)算法,用于解决噪声统计未知或时变场景下的目标跟踪问题。通过实时调整过程噪声协方差Q和观测噪声协方差R,CM-AUKF显著提升了跟踪精度和稳定性。仿真结果表明,相比传统UKF,CM-AUKF在位置和速度估计误差上分别降低了约50%和30%,且无需人工调参。该算法适用于无人机导航、雷达跟踪等动态环境,MATLAB代码可直接运行复现结果。自适应曲线显示算法能有效收敛到真实噪声参数,验证了其自适应能力。

985工科博士毕业,专攻定位、导航和滤波等算法研究。从业10年,主要使用MATLAB 330

课程冲突(2023.9三级)

然后再次循环,循环次数为课程的数量,在循环中判断,下一节课的开始时间是否小于上一节课的结束时间,如果判断结果为true,则说明两者冲突,就需要记录重合的时间根据在题目分析中的结论,得到第一节课的结束时间减去下一节课的开始时间加上一个1就会得出两者重复的时间,定义一个flag变量,初始化设置为0,保存上一个表达式计算的结果。就需要定义一个max变量,初始化设置为0,与flag判断大小,如果比flag小,就将flag的值保存与max中,使max中的值始终为最大。

w18382283058的博客 1284

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

C++三级----2021年9月

C++3级----2021年

jsshujujiegou的博客 1506

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

递推与递归(以枚举为例)

前言:本专栏文章主要是记录蓝桥杯算法学习过程中本人对其的理解和总结 主要以c++进行程序编写 并为现阶段学习c语言不了解c++的同学进行批注方便了解 后会每天更新 欢迎各位大佬指点

m0_65897110的博客 490

2415nyoj备用-吃糖果(模拟,桶排)

2415 : 吃糖果 题目描述 南阳理工附属幼儿园有m个小胖友。每天,这些小胖友都要吃很多很多糖果,Miss.miao是负责分发糖果的老师,由于工作量巨大,Miss.miao经常不能保证每个小胖友分到的糖果数量是一样的。如果存在两个小胖友的糖果数量的差值超过k,那么这些小胖友就会很不开心。   现在,假设给出你每个小胖友的糖果数量,你作为这些小胖友中最聪明的一个,Miss.Miao老师要你协

>*,< 351

考前复习--枚举类型(C语言,含例题)

Q3:某餐厅用西瓜、桃子、草莓、香蕉、菠萝、苹果六种水果制作水果拼盘,要求每个拼盘中有四种不同水果。编写程序计算可以制作出多少种这样的水果拼盘。

m0_72951563的博客 3380

2020年9月青少年C/C++软件编程(三级)等级考试试卷及答案解析

写一个程序,找到无法匹配的左括号和右括号,输出原来字符串,并在下一行标出不能匹配的括号。不能匹配的左括号用"$"标注,不能匹配的右括号用"?对每组输出数据,输出两行,第一行包含原始输入字符,第二行由"$","?"和空格组成,"$"和"?输入包括多组数据,每组数据一行,包含一个字符串,只包含左右括号和大小写字母,字符串长度不超过100。任给两个正整数N、M,求一个最小的正整数a,使得a和(M-a)都是N的因子。一个不大于10000的正整数S,为两个质数的和。每一行输出对应一行输入的结果,即为吃法的数目。

msn_feng023的博客 1133

c_算法_枚举、递推、递归、迭代、分治

1、枚举:本质就是从所有候选答案中去搜索正确的解,使用该算法需要满足两个条件:(1)可预先确定候选答案的数量;(2)候选答案的范围在求解之前必须有一个确定的集。#include&amp;lt;stdio.h&amp;gt; #include&amp;lt;windows.h&amp;gt; /* *枚举法:实现给出任意五个数和结果,利用加减乘除使等式成立 *考虑1:优先级 *考虑2:除法右边不能为0; */ int judge(...

zhangm2020的博客 2785

算法竞赛进阶指南 递归实现排列型枚举

递归实现排列型枚举

脚踏实地,仰望星空 3057

动态规划练习——吃糖果

题目要求: 一盒巧克力给名名(盒内共有 N 块巧克力,20 > N >0),名名每天可以吃一块或者两块巧克力。假设名名每天都吃巧克力,问名名共有多少种不同的吃完巧克力的方案。例如:如果N=1,则名名第1天就吃掉它,共有1种方案;如果N=2,则名名可以第1天吃1块,第2天吃1块,也可以第1天吃2块,共有2种方案;如果N=3,则名名第1天可以吃1块,剩2块,也可以第1天吃2块剩1块,所以名名共有2+

Trust_Youself 1102
上一篇: 青少年软件编程(202209)(C语言)(数组&函数)等级考试(二级)试题及参考答案
下一篇: 青少年软件编程(202209)(C语言)(动态规划)等级考试(四级)试题及参考答案
鲲鹏混子鱼
博客等级 码龄9年 81粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值