中国电子学会(CEIT)2020年09月真题C语言软件编程等级考试三级(含详细解析答案)

中国电子学会(CEIT)考评中心历届真题(含解析答案)

C语言软件编程等级考试三级 2020年09月

编程题五道							总分:100分

一、因子问题(20分)
任给两个正整数N、M,求一个最小的正整数a,使得a和(M-a)都是N的因子。
时间限制: 10000ms
内存限制: 65536kb
输入
包括两个整数N、M。N不超过1,000,000。输出
输出一个整数a,表示结果。如果某个案例中满足条件的正整数不存在,则在对应行输出-1
样例输入

35 10

样例输出

5
#include <stdio.h>  // 引入标准输入输出库,用于使用scanf和printf函数int main() {  // 主函数入口int i,m, n;  // 声明三个整型变量i, m, nscanf("%d %d", &n, &m);  // 从标准输入读取两个整数,并分别赋值给n和m// 使用枚举法来查找满足条件的ifor(i = 1; i < n; i++) {  // 初始化i为1,并在每次迭代后递增,直到i大于n时停止if(n % i == 0 && n % (m - i) == 0) {  // 检查n是否能被i整除,并且n是否能被(m-i)整除printf("%d", i);  // 如果满足条件,打印i的值return 0;  // 退出程序,返回0表示正常结束}}printf("-1");  // 如果循环结束后没有找到满足条件的i,则打印-1return 0;  // 退出程序,返回0表示正常结束
}
/*此代码的目的是找到一个整数i,使得n可以被i和(m-i)整除。如果找到了这样的i,则打印出i并结束程序;如果没有找到,则打印-1并结束程序。
*/

二、质数的和与积(20分)
两个质数的和是S,它们的积最大是多少?
时间限制: 10000ms
内存限制: 65536kb
输入
一个不大于10000的正整数S,为两个质数的和。输出
一个整数,为两个质数的最大乘积。数据保证有解。
样例输入

50

样例输出

589
#include <stdio.h>  // 引入标准输入输出库,用于printf和scanf函数
#include <math.h>   // 引入数学库,用于sqrt函数bool judge(int x){ // 定义一个函数,用于判断一个整数x是否为素数int i;         // 定义循环变量iif(x==2) return false; // 如果x为2,返回false,因为2是唯一的偶数素数for(i=2; i<=sqrt(x); i++) // 从2开始,到x的平方根(包含),遍历所有可能的因子if(x%i==0) // 如果x能被i整除return false; // 则x不是素数,返回falsereturn true;  // 如果x不能被2到其平方根之间的任何数整除,那么x是素数,返回true
}int main() { // 主函数入口int i,s;   // 定义循环变量i和输入变量sscanf("%d" ,&s); // 从标准输入读取一个整数,并存储在变量s中for(i=s/2; i>=2; i--){ // 从s/2开始,递减到2,遍历所有可能的数if(judge(i)&&judge(s-i)){ // 判断i和s-i是否都是素数printf("%d \n",i*(s-i)); // 如果是,输出它们的乘积,并结束程序return 0;}}printf("-1"); // 如果找不到符合条件的素数对,输出-1return 0;     // 结束程序
}

三、扩号匹配问题(20分)
在某个字符串(长度不超过100)中有左括号、右括号和大小写字母;规定(与常见的算数式子一样)任何一个左括号都从内到外与在它右边且距离最近的右括号匹配。写一个程序,找到无法匹配的左括号和右括号,输出原来字符串,并在下一行标出不能匹配的括号。不能匹配的左括号用"$"标注,不能匹配的右括号用"?"标注.
时间限制: 3000ms
内存限制: 65536kb
输入
输入包括多组数据,每组数据一行,包含一个字符串,只包含左右括号和大小写字母,字符串长度不超过100
输出
对每组输出数据,输出两行,第一行包含原始输入字符,第二行由"$""?"和空格组成,"$""?"表示与之对应的左括号和右括号不能匹配。
样例输入

((ABCD(x)
)(rttyy())sss)(

样例输出

((ABCD(x)
$$
)(rttyy())sss)(
?            ?$
#include <stdio.h>  // 引入标准输入输出头文件,这样我们可以使用scanf和printf等函数
#include <string.h> // 引入字符串处理头文件
#define N 105        // 定义一个常量N,用于指定数组的最大长度int main() {         // 主函数开始int i,j,n;         // 定义三个整型变量i, j, nchar s[N] = " ";   // 定义一个字符数组s,长度为N,初始化为一个空格int flag[N];       // 定义一个整型数组flag,用于标记括号的位置while (scanf("%s", s)!= EOF) { // 使用scanf读取字符串,直到遇到文件结束符EOFn = strlen(s);   // 获取字符串s的长度// 将字符串中的括号转换为对应的标记for (i = 0; i < n; i++){if (s[i]== '(')  // 如果是左括号,标记为1flag[i]= 1;else if (s[i]== ')') // 如果是右括号,标记为-1flag[i]= -1;elseflag[i] = 0;  // 其他字符标记为0}// 遍历字符串,处理右括号for (i = 0; i < n; i++){if (flag[i] == -1){// 如果当前字符是右括号,向前搜索匹配的左括号for (j = i - 1; j >= 0; j--){if (flag[j] == 1) {// 如果找到匹配的左括号,将两个括号标记为0flag[i] = 0;flag[j] = 0;break;  // 跳出内层循环}}}}printf("%s\n",s);  // 输出处理前的字符串// 根据标记数组打印结果for (i = 0; i < n; i++){if (flag[i] == 0)printf(" ");  // 如果是空格或已匹配的括号,输出空格else if(flag[i]== 1)printf("$");  // 如果是左括号,输出$else if (flag[i]== -1)printf("?");  // 如果是未匹配的右括号,输出?}printf("\n"); // 输出换行符}return 0; // 主函数返回0,表示程序正常结束
}
/*程序的目的是处理用户输入的字符串,其中包含左括号'('和右括号')'。程序会标记出每个括号的位置,并检查是否有未匹配的右括号。如果有未匹配的右括号,程序会在输出时将其替换为'?',而匹配的括号对会被替换为空格。左括号会被替换为'$'。
*/

四、吃糖果(20分)
名名的妈妈从外地出差回来,带了一盒好吃又精美的巧克力给名名(盒内共有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+1=3种方案;
如果N=4,则名名可以第1天吃1块,剩3块,也可以第1天吃2块,剩2块,共有3+2=5种方案。
现在给定N,请你写程序求出名名吃巧克力的方案数目。
时间限制: 1000ms
内存限制: 65536kb
输入
输入只有1行,即整数N。
输出
输出只有1行,即名名吃巧克力的方案数。
样例输入

4

样例输出

5
#include<stdio.h>  // 引入标准输入输出库,这样我们可以使用scanf和printf等函数// 定义一个函数func,它接受一个整数n作为参数,并返回斐波那契数列中第n项的值
int func(int n){if(n==1)  // 如果n等于1return 1;  // 返回斐波那契数列的第1项,即1if(n==2)  // 如果n等于2return 2;  // 返回斐波那契数列的第2项,即2// 如果n不是1也不是2,那么返回前两项的和,即func(n-1) + func(n-2)return func(n-1)+func(n-2);
}// main函数,程序的入口点
int main() {int n;  // 定义一个整数变量n,用于存储用户输入的数字scanf("%d",&n);  // 使用scanf函数从标准输入读取一个整数,并将其存储在变量n中printf("%d",func(n));  // 使用printf函数输出斐波那契数列中第n项的值return 0;  // 表示程序正常结束
}
/*实现是基于递归的,对于较大的n值,它的效率会非常低,因为它会重复计算很多相同的子问题。在实际应用中,通常会使用其他方法来提高计算斐波那契数列的效率,比如动态规划或缓存已计算的值。
*/

五、铺砖(20分)
对于一个2行N列的走道。现在用1*22*2的砖去铺满。问有多少种不同的方式。
时间限制: 3000ms
内存限制: 131072kb
输入
整个测试有多组数据,请做到文件底结束。每行给出一个数字N,0 <=n<= 250
输出
如题
样例输入

2
8
12
100
200

样例输出

3
171
2731
845100400152152934331135470251
1071292029505993517027974728227441735014801995855195223534251
#include <stdio.h>	// 引入标准输入输出库,这样我们可以使用scanf和printf等函数
#include <string.h>	// 引入字符串处理头文件// 大数相加函数
void Ladd(const char *a, const char *b, char *res) {int an, bn, k, f, i, j;int af[300] = {0}, bf[300] = {0}, c[300] = {0};// 获取字符串a和b的长度an = strlen(a);bn = strlen(b);// k为较长的字符串长度k = an > bn ? an : bn;// 初始化进位标志为0f = 0;// 将字符串a和b转换为整数数组af和bffor (i = 0; i < an; i++)af[i] = a[an - i - 1] - '0';for (i = 0; i < bn; i++)bf[i] = b[bn - i - 1] - '0';// 执行大数相加for (i = 0; i < k; i++) {c[i] += (af[i] + bf[i]) % 10; // 个位数相加c[i + 1] += (af[i] + bf[i]) / 10; // 进位}// 如果最高位有进位,则k增加1if (c[i] != 0)k++;// 将结果数组c转换为字符串并存储到res中for (i = k - 1, j = 0; i >= 0; i--) {res[j++] = c[i] + '0';}
}char dp[300][300]; // 存储斐波那契数列变种的数组int main() {int n;char res[300];// 初始化前两个数字strcpy(dp[0], "1");strcpy(dp[1], "1");strcpy(dp[2], "3");// 根据公式d[i] = d[i-1] + d[i-2] * 2推导数列// 计算斐波那契数列的变种for (int i = 3; i <= 250; i++) {	memset(res, 0, sizeof(res)); // 清零结果字符串Ladd(dp[i - 2], dp[i - 2], res); // d[i-2]的两倍Ladd(dp[i - 1], res, res); // 加上d[i-1]strcpy(dp[i], res); // 存储结果}// 从标准输入读取n,并打印dp[n]直到n为0while (true) {scanf("%d", &n);if (n == 0)break;printf("%s\n", dp[n]);}return 0;
}
/*程序的主要逻辑是计算一个特定斐波那契数列的变种,其中每个数字是前两个数字之和的两倍。程序首先初始化前两个数字,然后使用循环计算后续的数字,并将它们存储在dp数组中。然后,程序进入一个无限循环,不断从标准输入读取一个数字n,并打印出dp[n]的值,直到用户输入0为止。
*/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/731240.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在ubuntu上使用vscode+gcc-arm-none-eabi+openocd工具开发STM32

文章目录 所需工具安装调试搭建过程中遇到的问题 写在前面 老大上周让我用vscode开发STM32&#xff0c;我爽快的答应了&#xff0c;心想大学四年装了这么多环境了这不简简单单&#xff0c;更何况vscode这两年还用过&#xff0c;然而现实总是令人不快的——我竟然花了差不多两周…

第三百九十回

文章目录 1. 概念介绍2. 思路与方法2.1 实现思路2.2 实现方法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何把异步的CallBack转换成事件流"相关的内容&#xff0c;本章回中将介绍如何延时处理数据.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介…

new;getline();重载<<和>>

面向对象程序设计的优点&#xff1a; 易维护易扩展模块化&#xff1a;通过设置访问级别&#xff0c;限制别人对自己的访问&#xff0c;保护了数据安全 int main(){ return 0;} 返回值0在windows下编程一般没用&#xff0c;但是在linux中编程&#xff0c;返回值有时有用 汇编与…

在Leaflet中使用Turf.js生成范围多边形的两种实现方式

目录 前言 一、场景需求 1、Leaflet.js的不足 2、Turf.js 二、原始数据展示 1、点位数据展示 2、定义样式 3、定位数据初始化 三、Turfjs中bbox生成 1、官网讲解 2、轨迹bbox生成 四、Turfjs生成外包多边形 1、官网例子 2、凸多边形生成 总结 前言 在一些共享出…

HTML二识

图片&#xff0c;音频&#xff0c;视频标签 标签描述<img>定义图片<audio>定义音频<video>定义视频 定义图片&#xff1a; src&#xff1a;规定显示图片的URL&#xff08;统一资源定位符&#xff09;height&#xff1a;定义图像的高度 单位&#xff1a;px…

Django cookie 与 session

Cookie 的语法 设置 cookie: rep.set_cookie(key,value,...) rep.set_signed_cookie(key,value,salt123,...) 获取 cookie: request.COOKIES.get(key) 删除 cookie: rep HttpResponse || render || redirect rep.delete_cookie(key) 工作原理 a. 浏览器第一次请求获取…

德人合科技|天锐绿盾加密软件——数据防泄漏系统

德人合科技是一家专注于提供企业级信息安全解决方案的服务商&#xff0c;提供的天锐绿盾加密软件是一款专为企业设计的数据安全防护产品&#xff0c;主要用于解决企事业单位内部敏感数据的防泄密问题。 www.drhchina.com PC端&#xff1a; https://isite.baidu.com/site/wjz012…

spring-cloud-openfeign 3.0.0之前版本(对应spring boot 2.4.x之前版本)feign配置加载顺序

在之前写的文章配置基础上 https://blog.csdn.net/zlpzlpzyd/article/details/136060312 下图为自己整理的

正则表达式 || 遇到字符串里面有() 就在括号后面换行

<template><div class"vertical-layout"><header><h1>testPage</h1><p>(1)第一行内容xxxxxxxxx&#xff08;2&#xff09;第二行内容xxxxxxx(3)第三行内容</p></header><main><el-button click"goToO…

Matlab|2机5节点牛拉法(含报告)

目录 主要内容 下载链接 主要内容 采用牛拉法计算2机5节点的潮流计算程序&#xff0c;程序迭代稳定&#xff0c;运行可靠&#xff0c;含报告资料。 下载链接

动态规划 Leetcode 509 斐波那契数

斐波那契数 Leetcode 509 学习记录自代码随想录 斐波那契数 &#xff08;通常用 F(n) 表示&#xff09;形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始&#xff0c;后面的每一项数字都是前面两项数字的和。也就是&#xff1a; F(0) 0&#xff0c;F(1) 1 F(n) F(n …

【SQL - 软件 - MySQL】随笔 - 查看已有数据库

查看已有数据库 语法 语法格式 SHOW DATABASES [LIKE 数据库名]&#xff1b;语法说明 "[ ]"中的内容是可选项&#xff0c;用于匹配特定的数据库名称。可以部分匹配&#xff0c;也可以完全匹配&#xff1b; 使用示例 01 代码 SHOW DATABASES LIKE test;描述 查看…

华为北向网管NCE开发教程(3)CORBA协议开发

华为北向网管NCE开发教程&#xff08;1&#xff09;闭坑选接口协议 华为北向网管NCE开发教程&#xff08;2&#xff09;REST接口开发 华为北向网管NCE开发教程&#xff08;3&#xff09;CORBA协议开发 如果你真的还有选择的余地&#xff0c;能用REST&#xff0c;尽量用REST&…

错误和异常之标准异常创建异常

标准异常 表 10.2 列出了所有的 Python 当前的标准异常集,所有的异常都是内建的. 所以它们在脚本启动 前或在互交命令行提示符出现时已经是可用的了. 表10.2 Python内建异常 异常名称描述所有异常的基类 python 解释器请求退出 用户中断执行(通常是输入^C) 常规错误的基类

Flutter使用auto_updater实现windows/mac桌面应用版本升级功能

因为windows应用一般大家都是从网上下载的&#xff0c;后期版本肯定会更新&#xff0c;那用flutter开发windows应用&#xff0c;怎么实现应用内版本更新功能了&#xff1f;可以使用auto_updater库&#xff0c; 这个插件允许 Flutter 桌面 应用自动更新自己 (基于 sparkle 和 wi…

Linux rmmod命令教程:如何卸载内核模块(附实例详解和注意事项)

Linux rmmod命令介绍 rmmod&#xff08;全称&#xff1a;remove module&#xff09;用于从Linux内核中卸载已加载的内核模块。它允许您在运行时移除不再需要的模块&#xff0c;以释放系统资源或更改内核配置。 Linux rmmod命令适用的Linux版本 rmmod在大多数Linux发行版中通…

#onenet网络请求http(GET,POST)

参考博文&#xff1a; POST: https://blog.csdn.net/qq_43350239/article/details/104361153 POST请求&#xff08;用串口助手测试&#xff09;&#xff1a; POST /devices/1105985351/datapoints HTTP/1.1 api-key:AdbrV5kCRsKsRCfjboYOCVcF9FY Host:api.heclouds.com Con…

java各种集合...习题

1 题目&#xff1a;给定一个长度为N的数组A&#xff0c;请你先从小到大输出它的每个元素&#xff0c;在从大到小输出它的每个元素。 示例输入 5 1 3 2 6 5 输出 1 2 3 5 6 6 5 3 2 1 package AAA;import java.util.*;public class Main5 {public static void main(Strin…

Linux内核中轮询对应于应用层的函数之一:epoll函数

一. 简介 应用层中提供的 select函数、poll函数 和 epoll函数可以用于处理轮询,应用程序通过 select、 epoll 或 poll 函数来查询设备是否可以操作。 应用层提供的 select()、poll() 或 epoll() 这三个函数,对应于对应了Linux驱动 file_operations 结构体中的成员函数 .pol…

Util工具类功能设计与类设计(http模块一)

目录 类功能 类定义 类实现 编译测试 Split分割字符串测试 ReadFile读取测试 WriteFile写入测试 UrlEncode编码测试 UrlDecode编码测试 StatuDesc状态码信息获取测试 ExtMime后缀名获取文件mime测试 IsDirectory&IsRegular测试 VaildPath请求路径有效性判断测…