当前位置: 首页 > article >正文

软件设计师-下午题-试题4(15分)

目录

1 回溯法

1.1 N皇后问题

1.1.1 非递归求解N皇后问题

1.1.2 递归求解N皇后问题

1.2 真题

2 分治法

2.1 真题

3 动态规划法

3.1 0-1背包问题

3.2 真题


1 回溯法

1.1 N皇后问题

上图Q4与Q2在同一列且与Q1在同一斜线,先回溯到上一个皇后改变Q3皇后的位置,若不行,再向上回溯,直到回溯到第一个皇后位置可行,再向下回溯,直到每个皇后位置都可行。

在软考中,最终表示如下

1.1.1 非递归求解N皇后问题

#include <math.h>
#include <stdio.h>#define N 4
// #define N 10int q[N + 1]; // 存储皇后的列号int check(int j) { // 检查第 j 个皇后的位置是否合法int i;for (i = 1; i < j; i ++ ) {if (q[i] == q[j] || abs(i - j) == abs(q[i] - q[j])) { // 判断是否在同一列和同一斜线上return 0;}}return 1;
}void queen() { // 求解 N 皇后 方案int i;for (i = 1; i <= N; i ++ ) {q[i] = 0;}int answer = 0; // 方案数int j = 1; // 表示正在摆放第 j 个皇后while (j >= 1) {q[j] = q[j] + 1; // 让第 j 个皇后向后一列摆放while (q[j] <= N && !check(j)) { // 判断第 j 个皇后的位置是否合法q[j] = q[j] + 1; // 不合法就往后一个位置摆放}if (q[j] <= N) { // 表示第 j 个皇后的找到一个合法的摆放位置if (j == N) { // 找到了 N 皇后的一组解answer = answer + 1;printf("方案%d:", answer);for (i = 1; i <= N; i ++ ) {printf("%d ", q[i]);}printf("\n");} else {j = j + 1; // 继续摆放下一个皇后}} else { // 表示第 j 个皇后找不到一个合法的摆放位置q[j] = 0; // 还原第 j 个皇后的位置j = j - 1; // 回溯}}
}int main() {queen();return 0;
}

1.1.2 递归求解N皇后问题

#include <math.h>
#include <stdio.h>#define N 4
// #define N 10int answer = 0;
int q[N + 1]; // 存储皇后的列号int check(int j) { // 检查第 j 个皇后的位置是否合法int i;for (i = 1; i < j; i ++ ) {if (q[i] == q[j] || abs(i - j) == abs(q[i] - q[j])) { // 判断是否在同一列和同一斜线上return 0;}}return 1;
}void queen(int j) {int i;for (i = 1; i <= N; i ++ ) {q[j] = i;if (check(j)) { // 当摆放的皇后位置为合法时if (j == N) { // 找到了 N 皇后的一组解answer = answer + 1;printf("方案%d:", answer);for (i = 1; i <= N; i ++ ) {printf("%d ", q[i]);}printf("\n");} else {queen(j + 1); // 递归摆放下一个皇后的位置}}}
}int main() {queen(1);return 0;
}

1.2 真题

1.2015年上半年

2.2019年上半年

2 分治法

#include <stdio.h>
#include <sched.h>void Merge(int A[], int p, int q, int r) {int i, j, k;int L[50], R[50];int n1 = q - p + 1, n2 = r - q;for (i = 0; i < n1; i ++ ) {L[i] = A[p + i];}for (j = 0; j < n2; j ++ ) {R[j] = A[q + j + 1];}L[n1] = INT_MAX;R[n2] = INT_MAX;i = 0;j = 0;for (k = p; k < r + 1; k ++ ) {if (L[i] < R[j]) {A[k] = L[i];i ++ ;} else {A[k] = R[j];j ++ ;}}
}void MergeSort(int A[], int p, int r) {int q;if (p < r) {q = (p + r) / 2;MergeSort(A, p, q);MergeSort(A, q + 1, r);Merge(A, p, q, r);}
}int main() {int A[] = {4, 1, 3, 6, 8, 5, 2, 9};MergeSort(A, 0, 7);int i;for (i = 0; i < 8; i ++ ) {printf("%d ", A[i]);}return 0;
}

2.1 真题

1.2014年上半年

2.2017年上半年

3.2020年下半年

3 动态规划法

3.1 0-1背包问题

#include <stdio.h>#define N 4 // 物品数量
#define W 5 // 背包容量int max(int a, int b) {return a > b ? a : b;
}int main() {int v[] = {0, 2, 4, 5, 6}; // 物品价值数组int w[] = {0, 1, 2, 3, 4}; // 物品重量数组int f[N + 1][W + 1] = {}; // 子问题解数组int i, j;for (i = 1; i <= N; i ++ ) {for (j = 1; j <= W; j ++ ) {f[i][j] = f[i - 1][j]; // 默认不选第 i 个物品if (j >= w[i]) { // 选第 i 个物品的前提条件// 等于 不选第 i 个物品 和 选第 i 个物品 两者的较大值f[i][j] = max(f[i][j], f[i - 1][j - w[i]] + v[i]);}// 上方是写法 1/* ============================================================ */// 下方是写法 2 /*if (j >= w[i]) { // 选第 i 个物品的前提条件// 等于 不选第 i 个物品 和 选第 i 个物品 两者的较大值f[i][j] = max(f[i - 1][j], f[i - 1][j - w[i]] + v[i]);} else { // 不选第 i 个物品f[i][j] = f[i - 1][j]; // 等于 从前 i - 1 个物品中选,背包容量为 j 时的最大价值}*/}}printf("%d\n", f[N][W]);for (i = 0; i <= N; i ++ ) {for (j = 0; j <= W; j ++ ) {printf("%d ", f[i][j]);}printf("\n");}return 0;
}

3.2 真题

1.2019年下半年

2.2021年下半年

相关文章:

软件设计师-下午题-试题4(15分)

目录 1 回溯法 1.1 N皇后问题 1.1.1 非递归求解N皇后问题 1.1.2 递归求解N皇后问题 1.2 真题 2 分治法 2.1 真题 3 动态规划法 3.1 0-1背包问题 3.2 真题 1 回溯法 1.1 N皇后问题 上图Q4与Q2在同一列且与Q1在同一斜线&#xff0c;先回溯到上一个皇后改变Q3皇后的位置…...

《隐私计算:数据安全与隐私保护的新希望》

一、引言 在数字化时代&#xff0c;数据已成为企业和组织的核心资产。然而&#xff0c;数据的收集、存储和使用过程中面临着诸多隐私和安全挑战。隐私计算作为一种新兴技术&#xff0c;旨在解决数据隐私保护和数据共享之间的矛盾。本文将深入探讨隐私计算的基本概念、技术原理、…...

leetcode二叉树相关题目复习(C语言版)

目录 1.单值二叉树 2.相同的树 3.对称二叉树 4.二叉树的前序遍历 5.另一颗树的子树 1.单值二叉树 思路1&#xff1a; 判断根节点、左节点与右节点的值是否相等&#xff0c;因为正向判断&#xff08;即判断三值相等返回true&#xff09;比较麻烦&#xff08;不能根节点满足…...

第十九次博客打卡

今天学习的内容是Java中的常见循环。 在 Java 中&#xff0c;常见的循环结构主要有以下几种&#xff1a;for 循环、while 循环、do-while 循环以及增强型 for 循环&#xff08;也称为 for-each 循环&#xff09;。 1. for 循环 for 循环是一种非常灵活的循环结构&#xff0c…...

【Pandas】pandas DataFrame describe

Pandas2.2 DataFrame Computations descriptive stats 方法描述DataFrame.abs()用于返回 DataFrame 中每个元素的绝对值DataFrame.all([axis, bool_only, skipna])用于判断 DataFrame 中是否所有元素在指定轴上都为 TrueDataFrame.any(*[, axis, bool_only, skipna])用于判断…...

机器人示教操作

机器人基础操作 **ES机器人试教操作知识** **1. 视角移动** **1.1 基础模式** - 关节轴控制&#xff1a;通过关节1至关节6实现单轴正反转移动 - 直线移动&#xff1a;通过X/Y/Z坐标轴沿指定方向直线移动 - 旋转移动&#xff1a;通过RX/RY/RZ坐标轴绕指定轴旋转 **1.2 步进模式…...

浅聊一下数据库的索引优化

背景 这里的索引说的是关系数据库&#xff08;MSSQL&#xff09;中的索引。 本篇不是纯技术性的内容&#xff0c;只是聊一次性能调优的经历&#xff0c;包含到一些粗浅的实现和验证手段&#xff0c;所以&#xff0c;大神忽略即可。 额…对了&#xff0c;笔者对数据库的优化手段…...

山东大学软件学院软件工程计算机图形学复习笔记(2025)

写在前面&#xff1a; 现在是考完试的第二天&#xff0c;考试的内容还是有一部分没有复习到的…… 根据三角形的3个顶点坐标和内部某点坐标D&#xff0c;写出点D的基于面积的权重坐标Bresenham的算法描述与改进策略&#xff08;这里ppt上很不清晰&#xff09;以及直线反走样的…...

【Docker】Docker Compose方式搭建分布式内存数据库(Redis)集群

文章目录 开发环境开发流程运行效果Docker Desktop桌面中的Redis结点启动图Redis结点1的打印日志情况图 配置代码命令行启动配置文件: README.md删除集群信息新建数据目录本地Redis的结点的域名,并添加到/etc/hosts文件的末尾域名映射启动集群结点创建集群关闭集群结点 redis-c…...

如何在 Bash 中使用 =~ 操作符 ?

在 Bash 脚本世界中&#xff0c;有各种操作符可供我们使用&#xff0c;使我们能够操作、比较和测试数据。其中一个操作符是 ~ 操作符。这个操作符经常被忽视&#xff0c;但功能非常强大&#xff0c;它为我们提供了一种使用正则表达式匹配字符串模式的方法。 ~ 操作符语法 语法…...

科学养生指南:打造健康生活

在快节奏的现代生活中&#xff0c;健康养生成为人们关注的焦点。科学养生无需复杂理论&#xff0c;掌握以下几个关键要素&#xff0c;就能为身体构筑坚实的健康防线。​ 合理饮食是健康的基础。世界卫生组织建议&#xff0c;每天应摄入至少 5 份蔬菜和水果&#xff0c;保证维生…...

华为OD机试真题——单词接龙(首字母接龙)(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现

2025 A卷 100分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…...

React构建组件

React构建组件 React 组件构建方式详解 React 组件的构建方式随着版本迭代不断演进&#xff0c;目前主要有 函数组件 和 类组件 两种核心模式&#xff0c;并衍生出多种高级组件设计模式。以下是完整的构建方式指南&#xff1a; 文章目录 React构建组件React 组件构建方式详解…...

计算机网络-MPLS VPN基础概念

前面几篇文章我们学习了MPLS的标签转发原理&#xff0c;有静态标签分发和LDP动态标签协议&#xff0c;可以实现LSR设备基于标签实现数据高效转发。现在开始学习MPLS在企业实际应用的场景-MPLS VPN。 一、MPLS VPN概念 MPLS&#xff08;多协议标签交换&#xff09;位于TCP/IP协…...

基于TouchSocket实现WebSocket自定义OpCode扩展协议

基于TouchSocket实现WebSocket自定义OpCode扩展协议 前言一、WebSocket OpCode规范速览二、实现示例&#xff1a;协同编辑光标同步1. 客户端发送实现2. 服务端接收处理 三、应用场景分析1. 实时协作系统2. 物联网控制协议3. 游戏实时交互 四、协议设计建议1. 帧结构优化2. 性能…...

【Linux系列】bash_profile 与 zshrc 的编辑与加载

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

Spring Boot中的拦截器!

每次用户请求到达Spring Boot服务端&#xff0c;你是否需要重复写日志、权限检查或请求格式化代码&#xff1f;这些繁琐的“前置后置”工作让人头疼&#xff01;好在&#xff0c;Spring Boot拦截器如同一道智能关卡&#xff0c;统一处理请求的横切逻辑&#xff0c;让代码优雅又…...

基于 Spring Boot 瑞吉外卖系统开发(十五)

基于 Spring Boot 瑞吉外卖系统开发&#xff08;十五&#xff09; 前台用户登录 在登录页面输入验证码&#xff0c;单击“登录”按钮&#xff0c;页面会携带输入的手机号和验证码向“/user/login”发起请求。 定义UserMapper接口 Mapper public interface UserMapper exte…...

计算机网络笔记(二十三)——4.5IPv6

4.5.1IPv6的基本首部 IPv6 的基本首部相对于 IPv4 进行了重大简化和优化&#xff0c;固定长度为 40 字节&#xff0c;大幅提升了路由器的处理效率。以下是各字段的详细说明&#xff1a; IPv6 基本首部字段组成 字段名位数作用描述版本 (Version)4 bits固定值为 6&#xff0c…...

推荐一个Winform开源的UI工具包

从零学习构建一个完整的系统 推荐一个开源、免费的适合.NET WinForms 控件的套件。 项目简介 Krypton是一套开源的.Net组件&#xff0c;用于快速构建具有丰富UI交互的WinForms应用程序。 丰富的UI控件&#xff0c;提供了48个基础控件&#xff0c;如按钮、文本框、标签、下拉…...

位与运算

只有当除数是 2 的幂次方&#xff08;如 2、4、8、16...&#xff09;时&#xff0c;取模运算才可以转换为位运算。 int b 19;int a1 b % 16; // 传统取模运算int a2 b & 15; // 位运算替代取模printf("b %d\n", b);printf("b %% 8 %d\n",…...

算法备案如何判断自己的产品是否具备舆论属性

判断互联网产品是否具备舆论属性或社会动员能力&#xff0c;需要结合《具备舆论属性或社会动员能力的互联网信息服务安全评估规定》法规及实际功能、用户规模、信息传播方式等综合因素判定。 一、舆论属性判断标准 &#xff08;1&#xff09;服务功能与形式 信息交互功能&am…...

AR禁毒:科技赋能,筑牢防毒新防线

过去&#xff0c;传统禁毒宣传教育方式对普及禁毒知识、提高禁毒意识意义重大。但随着时代和社会环境变化&#xff0c;其困境逐渐显现。传统宣传方式单一&#xff0c;主要依靠讲座、发传单、办展览。讲座形式枯燥&#xff0c;对青少年吸引力不足&#xff1b;发传单易被丢弃&…...

趣味编程:四叶草

概述&#xff1a;在万千三叶草中寻觅&#xff0c;只为那一抹独特的四叶草之绿&#xff0c;它象征着幸运与希望。本篇博客主要介绍四叶草的绘制。 1. 效果展示 绘制四叶草的过程是一个动态的过程&#xff0c;因此博客中所展示的为绘制完成的四叶草。 2. 源码展示 #define _CR…...

访问者模式(Visitor Pattern)详解

文章目录 1. 访问者模式概述1.1 定义1.2 基本思想2. 访问者模式的结构3. 访问者模式的UML类图4. 访问者模式的工作原理5. Java实现示例5.1 基本实现示例5.2 访问者模式处理复杂对象层次结构5.3 访问者模式在文件系统中的应用6. 访问者模式的优缺点6.1 优点6.2 缺点7. 访问者模式…...

城市生命线综合管控系统解决方案-守护城市生命线安全

一、政策背景 国务院办公厅《城市安全风险综合监测预警平台建设指南》‌要求&#xff1a;将燃气、供水、排水、桥梁、热力、综合管廊等纳入城市生命线监测体系&#xff0c;建立"能监测、会预警、快处置"的智慧化防控机制。住建部‌《"十四五"全国城市基础…...

# 2-STM32F103-复位和时钟控制RCC

STM32-复位和时钟控制RCC 2-STM32-复位和时钟控制RCC摘要说明本文参考资料如下&#xff1a; 一、STM32最小系统回顾STM32F103C8T6核心板原理图 二、复位三、时钟3.1 时钟树3.2 STM32启动过程3.2 SystemInit()函数3.2.1 SystemInit()第1句&#xff1a;3.2.2 SystemInit()第2句&a…...

多模态大语言模型arxiv论文略读(七十五)

PosterLLaVa: Constructing a Unified Multi-modal Layout Generator with LLM ➡️ 论文标题&#xff1a;PosterLLaVa: Constructing a Unified Multi-modal Layout Generator with LLM ➡️ 论文作者&#xff1a;Tao Yang, Yingmin Luo, Zhongang Qi, Yang Wu, Ying Shan, C…...

Angular 知识框架

一、Angular 基础 1. Angular 简介 Angular 是什么&#xff1f; 基于 TypeScript 的前端框架&#xff08;Google 维护&#xff09;。 适用于构建单页应用&#xff08;SPA&#xff09;。 核心特性 组件化架构 双向数据绑定 依赖注入&#xff08;DI&#xff09; 模块化设计…...

企业数字化转型背景下的企业知识管理挑战与经验杂谈

一、引言 在数字化转型的浪潮下&#xff0c;企业知识管理正面临前所未有的挑战。随着数据量的急剧增长&#xff0c;企业内部积累的信息呈现出碎片化、分散化的趋势&#xff0c;传统的知识管理体系已难以有效应对这一变革。首先&#xff0c;信息碎片化问题日益严重&#xff0c;…...