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

news2025/1/21 12:00:07

在这里插入图片描述

C/C++编程(1~8级)全部真题・点这里

第1题:完美立方

形如 a^3= b^3 + c^3 + d^3的等式被称为完美立方等式。例如 12^3= 6^3 + 8^3 + 10^3 。
编写一个程序,对任给的正整数 N (N≤100),寻找所有的四元组 (a, b, c, d),使得 a^3= b^3 + c^3 + d^3 ,其中 a,b,c,d均大于 11, 小于等于 N,且 b≤c≤d 。
时间限制:1000
内存限制:65536
输入
一个正整数 N(N≤100)。
输出
每行输出一个完美立方。输出格式为:
Cube = a, Triple = (b,c,d)
其中 a,b,c,d 所在位置分别用实际求出四元组值代入。
请按照 a 的值,从小到大依次输出。
当两个完美立方等式中 a 的值相同,则 b 值小的优先输出、仍相同则 c 值小的优先输出。
样例输入
24
样例输出
Cube = 6, Triple = (3,4,5)
Cube = 12, Triple = (6,8,10)
Cube = 18, Triple = (2,12,16)
Cube = 18, Triple = (9,12,15)
Cube = 19, Triple = (3,10,18)
Cube = 20, Triple = (7,14,17)
Cube = 24, Triple = (12,16,20)

下面是一个使用C语言实现的解决方案,可以找到满足完美立方等式的四元组 (a, b, c, d):

#include <stdio.h>

void find_perfect_cubes(int N) {
    for (int a = 2; a <= N; a++) {
        for (int b = 2; b <= N; b++) {
            for (int c = b; c <= N; c++) {
                for (int d = c; d <= N; d++) {
                    if (a * a * a == b * b * b + c * c * c + d * d * d) {
                        printf("Cube = %d, Triple = (%d,%d,%d)\n", a, b, c, d);
                    }
                }
            }
        }
    }
}

int main() {
    int N;
    scanf("%d", &N);

    find_perfect_cubes(N);

    return 0;
}

这个实现中,我们使用四重循环来遍历所有可能的四元组 (a, b, c, d)。其中,a从2到N,b从2到N,c从b到N,d从c到N。对于每个四元组,判断是否满足完美立方等式 a^3 = b^3 + c^3 + d^3 ,如果满足,则输出该四元组。

main函数中,我们读取输入的N,并调用find_perfect_cubes函数找到满足条件的四元组。然后,我们按照要求输出每个完美立方等式的结果。

注意:在实际编写和运行代码时,请确保输入数据的格式和范围符合题目要求,并进行必要的错误处理。

第2题:不定方程求解

给定正整数a,b,c。求不定方程 ax+by=c 关于未知数x和y的所有非负整数解组数。
时间限制:1000
内存限制:65536
输入
一行,包含三个正整数a,b,c,两个整数之间用单个空格隔开。每个数均不大于1000。
输出
一个整数,即不定方程的非负整数解组数。
样例输入
2 3 18
样例输出
4

下面是一个使用C语言实现的解决方案,可以求解不定方程 ax+by=c 的非负整数解组数:

#include <stdio.h>

int count_solutions(int a, int b, int c) {
    int count = 0;
    for (int x = 0; x <= c / a; x++) {
        int remainder = c - a * x;
        if (remainder % b == 0) {
            count++;
        }
    }
    return count;
}

int main() {
    int a, b, c;
    scanf("%d %d %d", &a, &b, &c);

    int num_solutions = count_solutions(a, b, c);
    printf("%d\n", num_solutions);

    return 0;
}

这个实现中,我们定义了一个辅助函数count_solutions,用于计算不定方程的非负整数解组数。在函数中,我们使用一个循环来遍历所有可能的x值,其中x的范围是从0到c/a。对于每个x值,我们计算对应的余数remainder = c - a * x,并检查remainder是否能被b整除。如果能整除,则表示存在一个满足条件的非负整数解组,计数器count加1。

main函数中,我们读取输入的a、b、c,并调用count_solutions函数计算解组数。然后,我们输出解组数。

注意:在实际编写和运行代码时,请确保输入数据的格式和范围符合题目要求,并进行必要的错误处理。

第3题:分解因数

给出一个正整数 a ,要求分解成若干个正整数的乘积,即 a = a1· a2 ·a3·…·an,并且 1<a1≤a2≤a3≤…≤ an,问这样的分解的种数有多少。
注意到 a = a 也是一种分解。
时间限制:1000
内存限制:65536
输入
第 1 行是测试数据的组数 n(1≤n≤1000) ,后面跟着 n 行输入。每组测试数据占 1 行,包括一个正整数 a (1<a<32768)
输出
n 行,每行输出对应一个输入。输出应是一个正整数,指明满足要求的分解的种数。
样例输入
2
2
20
样例输出
1
4

下面是一个使用C语言实现的解决方案,可以计算给定正整数a的分解因数的种数:

#include <stdio.h>

int count_factors(int n) {
    int count = 0;
    for (int i = 1; i <= n; i++) {
        if (n % i == 0) {
            count++;
        }
    }
    return count;
}

int main() {
    int n;
    scanf("%d", &n);

    for (int i = 0; i < n; i++) {
        int a;
        scanf("%d", &a);

        int num_factors = count_factors(a);
        printf("%d\n", num_factors);
    }

    return 0;
}

这个实现中,我们定义了一个辅助函数count_factors,用于计算给定正整数n的因数个数。在函数中,我们使用一个循环来遍历从1到n的所有数,如果某个数能整除n,则计数器count加1。

main函数中,我们首先读取输入的测试数据组数n。然后,使用一个循环来处理每组测试数据。对于每组数据,我们读取输入的正整数a,并调用count_factors函数计算分解因数的种数。最后,我们输出结果。

注意:在实际编写和运行代码时,请确保输入数据的格式和范围符合题目要求,并进行必要的错误处理。

第4题:上台阶

楼梯有 n(1≤n≤30) 阶台阶,上楼时可以一步上 1 阶,也可以一步上 2 阶,也可以一步上 3 阶,编程计算共有多少种不同的走法。
时间限制:1000
内存限制:65536
输入
输入的每一行包括一组测试数据,即为台阶数 n(1≤n≤30) 。最后一行为0,表示测试结束。
输出
每一行输出对应一行输入的结果,即为走法的数目。
样例输入
1
2
3
4
0
样例输出
1
2
4
7

下面是一个使用C语言实现的解决方案,可以计算给定台阶数n的不同走法数量:

#include <stdio.h>

int count_ways(int n) {
    if (n <= 0) {
        return 0;
    } else if (n == 1) {
        return 1;
    } else if (n == 2) {
        return 2;
    } else if (n == 3) {
        return 4;
    } else {
        int ways[n+1];
        ways[1] = 1;
        ways[2] = 2;
        ways[3] = 4;
        for (int i = 4; i <= n; i++) {
            ways[i] = ways[i-1] + ways[i-2] + ways[i-3];
        }
        return ways[n];
    }
}

int main() {
    int n;
    while (1) {
        scanf("%d", &n);
        if (n == 0) {
            break;
        }
        int num_ways = count_ways(n);
        printf("%d\n", num_ways);
    }

    return 0;
}

这个实现中,我们定义了一个辅助函数count_ways,用于计算给定台阶数n的不同走法数量。在函数中,我们使用动态规划的思想来计算走法数量。对于n大于3的情况,我们使用一个数组ways来保存每个台阶数对应的走法数量。初始情况下,我们已知1阶有1种走法,2阶有2种走法,3阶有4种走法。然后,我们从4阶开始迭代计算每个台阶数的走法数量,通过累加前面三个台阶数的走法数量得到当前台阶数的走法数量。最后,我们返回数组ways中n阶对应的走法数量。

main函数中,我们使用一个循环来读取输入的台阶数n,并调用count_ways函数计算走法数量。当输入的台阶数为0时,表示测试结束,循环结束。

注意:在实际编写和运行代码时,请确保输入数据的格式和范围符合题目要求,并进行必要的错误处理。

第5题:田忌赛马

在田忌赛马的故事中,孙膑用自己的下等马对战对手的上等马,自己上等马对阵对手的中等马,自己的中等马对阵对手的下等马,从而赢得了胜利。现在即将进行的是N匹马的赛马比赛。双方队伍的马各分为N等。已知只有当我方马的等级比对方马等级高 X 等以上(包含 X )时,我方才可以取得这场比赛的胜利。如果在N场比赛中我方的胜场数大于对方,则我方取得最终的胜利。现在已知对方这 N 场比赛的出战方案,请计算所有令我方最终获胜的出战方案。
时间限制:1000
内存限制:65536
输入
第一行两个整数, N 和 X 。0≤X<N≤9 。 第二行 N 个正整数,A1, A2,…, AN 。Ai表示第 i 场比赛对方马的等级,1≤i≤N。等级越高越强。
输出
按字典序输出所有我方最终获胜的方案,每个方案一行。每行是 N 个正整数,两两之间以一个空格分隔,第 i 个数表示我方第 i 场比赛马的等级。
样例输入
样例输入1
3 1
3 2 1
样例输入2
3 0
3 1 2
样例输出
样例输出1
1 3 2
样例输出2
1 2 3
1 3 2
2 1 3
3 1 2
3 2 1

下面是一个使用C语言实现的解决方案,可以计算所有使我方最终获胜的出战方案:

#include <stdio.h>
#include <stdlib.h>

int N, X;
int opponent[10];
int used[10];
int my_horses[10];

int compare(const void *a, const void *b) {
    return *(int*)a - *(int*)b;
}

void dfs(int idx) {
    if (idx == N) {
        for (int i = 0; i < N; i++) {
            printf("%d ", my_horses[i]);
        }
        printf("\n");
        return;
    }

    for (int i = 0; i < N; i++) {
        if (!used[i] && my_horses[idx - 1] - opponent[i] >= X) {
            used[i] = 1;
            my_horses[idx] = opponent[i];
            dfs(idx + 1);
            used[i] = 0;
        }
    }
}

int main() {
    scanf("%d %d", &N, &X);

    for (int i = 0; i < N; i++) {
        scanf("%d", &opponent[i]);
    }

    qsort(opponent, N, sizeof(int), compare);

    my_horses[0] = 10; // 设置一个较大的初始值

    dfs(0);

    return 0;
}

这个实现中,我们使用深度优先搜索(DFS)算法来生成所有可能的我方出战方案。我们使用一个全局数组opponent来存储对方马的等级,并根据题目要求进行排序。我们还使用一个全局数组used来标记对方马是否被使用过,以及一个全局数组my_horses来存储我方马的等级。

dfs函数中,我们通过递归实现深度优先搜索。在每个递归层级中,我们检查所有未被使用的对方马,并且满足我方马的等级比对方马等级高X以上的条件。对于满足条件的对方马,我们将其标记为已使用,并将其添加到我方马的等级数组my_horses中。然后,我们继续递归调用dfs函数,进入下一个递归层级。当递归到最后一层时,即完成了一种出战方案的生成,我们将生成的出战方案输出。

main函数中,我们首先读取输入的N和X,并读取对方马的等级,并对对方马的等级进行排序。然后,我们调用dfs函数开始进行深度优先搜索,生成所有可能的我方出战方案。

注意:在实际编写和运行代码时,请确保输入数据的格式和范围符合题目要求,并进行必要的错误处理。

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

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

相关文章

leetcode 1382. 将二叉搜索树变平衡

2023.9.8 本题分为两步&#xff0c;先用中序遍历将二叉搜索树转化为排序数组&#xff0c;再通过排序数组构建一个平衡二叉树。 代码如下&#xff1a; /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;*…

数据结构与算法基础-学习-32-选择排序之简单选择排序、堆排序

目录 一、简单选择排序基本思路 二、简单选择排序基本操作 三、简单选择排序算法思路 四、简单选择排序代码 1、SimpleSelectSortSentrySqQueue 五、简单选择排序算法分析 1、记录移动次数 2、记录比较次数 六、简单选择排序Linux环境编译测试 七、堆的定义 八、堆调…

MySQL数据表的约束

数据表约束&#xff1a;对于某一列的值能添加哪些内容做了一定的限制&#xff0c;这种限制的手段就称为约束。 &#xff08;一&#xff09;约束的类型 NOT NULL 指示某列不能存储 NULL 值。UNIQUE保证某列的每行必须有唯一的值。DEFAULT规定没有给列赋值时的默认值。PRIMARY …

利用less实现多主题切换(配合天气现象)

1. 先看效果&#xff1a; 2. 话不多说直接撸吧&#xff1a; 原理&#xff1a;先给body元素添加style&#xff0c;再根据天气现象动态更改style 开撸&#xff1a; 创建src/assets/style/variables.less 使用 XXX:var(–XXX,‘style’) 声明系列变量&#xff0c;之后添加其他变…

redis如何保证接口的幂等性

背景 如何防止接口中同样的数据提交&#xff0c;以及如何保证消息不被重复消费&#xff0c;这些都是shigen在学习的过程中遇到的问题。今天&#xff0c;趁着在学习redis的间隙&#xff0c;我写了一篇文章进行简单的实现。 注意&#xff1a;仅使用于单机的场景&#xff0c;对于…

春秋云镜 CVE-2017-1000480

春秋云镜 CVE-2017-1000480 Smarty < 3.1.32 PHP代码执行漏洞 靶标介绍 3.1.32 之前的 Smarty 3 在未清理模板名称的自定义资源上调用 fetch() 或 display() 函数时容易受到 PHP 代码注入的影响。 启动场景 漏洞利用 poc /index.php?eval*/phpinfo();/*/index.php?ev…

原生JavaScript+PHP多图上传实现

摘要 很多场景下需要选择多张图片上传&#xff0c;或者是批量上传以提高效率&#xff0c;多图上传的需求自然就比较多了&#xff0c;本文使用最简单的XMLHttpRequest异步上传图片。 界面 上传示例 代码 index.html <!DOCTYPE html> <html><head><titl…

node.js下载安装环境配置以及快速使用

目录 一、下载 二、安装 三、测试安装是否成功 四、配置环境 五、测试配置环境是否成功 六、安装淘宝镜像 七、快速上手 1、建立一个自己的工作目录 2、下载工作代码 八、各种配置文件匹配问题入坑 九、总结 一、下载 Node.js 中文网 想选择其他版本或者其他系统使用…

【Chrome】chrome浏览器未连接到互联网

问题描述 电脑上安装了一个联想电脑管家&#xff0c;进行了一下清理&#xff0c;并优化了一下启动项&#xff0c;Chrome浏览器突然什么网站都无法访问了。以为更新坏了&#xff0c;但相同的网站放到火狐浏览器上&#xff0c;竟然可以打开&#xff0c;怎么回事呢&#xff1f;怎…

使用EMgu检测人脸

1,安装EMgu 在NuGet中,查找并安装EMgu 2,做人脸检测 首先,声明几个重要的类 //Thread.Sleep(3000);matImg = new Mat();capture.Retrieve(matImg, 0); frame=new Image<Bgr, byte>(matImg.Bitmap); 当,frame != null时,检测到人脸 3,给人脸画框 i…

MySQL主从分离读写复制

在高负载的生产环境里&#xff0c;把数据库进行读写分离&#xff0c;能显著提高系统的性能。下面对MySQL的进行读写分离。 试验环境 A机&#xff1a;IP:192.168.0.1 mysql版本&#xff1a;mysql-5.6.4,主数据服务器&#xff08;只写操作&#xff09; B机&#xff1a;IP:192.…

SpringMVC_执行流程

四、SpringMVC执行流程 1.SpringMVC 常用组件 DispatcherServlet&#xff1a;前端控制器&#xff0c;用于对请求和响应进行统一处理HandlerMapping&#xff1a;处理器映射器&#xff0c;根据 url/method可以去找到具体的 Handler(Controller)Handler:具体处理器&#xff08;程…

SpringMVC实现增删改查

文章目录 一、配置文件1.1 导入相关pom依赖1.2 jdbc.properties&#xff1a;配置文件1.3 generatorConfig.xml&#xff1a;代码生成器1.4 spring-mybatis.xml &#xff1a;spring与mybatis整合的配置文件1.5 spring-context.xml &#xff1a;上下文配置文件1.6 spring-mvc-xml:…

uni-app 之 获取网络列表数据

uni-app 之 获取网络列表数据 image.png <template><!-- vue2的<template>里必须要有一个盒子&#xff0c;不能有两个&#xff0c;这里的盒子就是 view--><view>--- uni.request 网络请求API接口 ---<view v-for"(item) in caturl" :key&…

学信息系统项目管理师第4版系列05_组织通用管理

1. 流程管理 1.1. 流程是组织运行体系的框架基础&#xff0c;流程框架的质量影响和决定了整个组织运行体系的质量 1.2. 流程是指工作活动流转的过程 1.2.1. 流程可以是跨部门、跨岗位工作活动流转的过程 1.3. 业务流程是一组将输入转化为输出的相互关联或相互作用的活动 1…

NPM 常用命令(六)

1、npm explain 1.1 命令使用 npm explain <package-spec>别名: why 1.2 描述 此命令将打印导致在当前项目被其他引用包的依赖链。 如果提供了一个或多个包规范&#xff0c;则只有与其中一个说明符匹配的包才会解释它们的关系。 包规范还可以引用 ./node_modules 中…

Typescript技术分享

1、初识TypeScript TypeScript是什么&#xff1f; TypeScript 是一种由微软开发的自由和开源的编程语言。它是 JavaScript 的一个超集。TypeScript 在 JavaScript 的基础上添加了可选的静态类型和基于类的面向对象编程。 2、TS类型 2.1 布尔类型(boolean) boolean类型只有两个取…

重建与发展:数字资产借贷行业朝着可持续发展迈进!

纵观历史&#xff0c;贷款和货币一样古老&#xff0c;无论哪种形式的货币都需要有其借贷市场。现在&#xff0c;比特币以其分散和透明的性质&#xff0c;在加密领域占据龙头地位。 就像之前的货币一样&#xff0c;比特币要真正蓬勃发展&#xff0c;也需要一个强大的借贷市场。然…

2023计算机毕业设计题目 毕设选题大全

文章目录 0 前言1 java web 管理系统 毕设选题2 java web 平台/业务系统 毕设选题3 游戏设计、动画设计类 毕设选题 (适合数媒的同学)4 算法开发5 数据挖掘 毕设选题6 大数据处理、云计算、区块链 毕设选题7 网络安全 毕设选题8 通信类/网络工程 毕设选题9 嵌入式 毕设选题10 开…

数据中心的未来是什么?

数据中心作为数字化经济的基础设施&#xff0c;在未来的发展中将会呈现出以下几个趋势和变化&#xff1a;多云环境的普及&#xff1a;未来的数据中心将会逐渐实现多云环境的兼容和协同&#xff0c;支持从公共云、私有云到混合云的多重部署模式。多云化环境将提供更多的选择和灵…