### C语言、C++编程作品集合知识点概览 #### 一、0-1背包动态规划 **知识点**: - **动态规划**:一种通过将原问题分解为相互重叠的子问题并解决这些子问题来求解原问题的方法。 - **0-1背包问题**:给定一组物品,每种物品都有自己的重量和价值,在限定的总重量内,如何选择物品才能使得物品的总价值最大。 **代码解析**: ```c #include<stdio.h> #define n 5 #define W 17 main() { int w, i; int c[n+1][W+1]; // 背包容量为w时有i件可选物体所导致的最优解的总价值 int w1[n+1] = {0, 3, 4, 7, 8, 9}; // 物品重量 int v[n+1] = {0, 4, 5, 10, 11, 13}; // 物品价值 int x[n+1] = {0}; // 初始的物品选择 for(w = 0; w <= W; w++) // 物品个数或背包容量为0时总价值都为0 c[0][w] = 0; for(i = 1; i <= n; i++) c[i][0] = 0; // 自底向上推 for(i = 1; i <= n; i++) // 按物品初始化时顺序依次尝试加入背包 for(w = 1; w <= W; w++) { if(w1[i] <= w) { if(v[i] + c[i-1][w-w1[i]] > c[i-1][w]) { c[i][w] = v[i] + c[i-1][w-w1[i]]; } else { c[i][w] = c[i-1][w]; } } else { c[i][w] = c[i-1][w]; } } printf("%d\n", c[n][W]); // 输出结果 // 确定哪些物品被选中 w = W; for(i = n; i >= 1; i--) { if(c[i][w] == c[i-1][w]) x[i] = 0; else { x[i] = 1; w -= w1[i]; } } for(i = 1; i <= 5; i++) printf("%d\n", x[i]); getch(); } ``` **解析**: - 此程序通过使用二维数组`c`来存储中间计算结果,其中`c[i][w]`表示在容量为`w`的背包中,从前`i`个物品中选择可以获得的最大价值。 - 使用`w1`和`v`分别记录每个物品的重量和价值。 - 通过两层循环遍历所有物品和背包容量的所有可能值,确定最优解。 - 最终输出的是最大价值以及哪些物品被放入了背包中。 #### 二、N皇后问题 **知识点**: - **N皇后问题**:在N×N的棋盘上放置N个皇后,要求任意两个皇后不能处于同一行、同一列或同一斜线上。 **代码解析**: ```c #include "stdio.h" #define M 10 int x[M]; bool place(int k, int j) { int i; for(i = 1; i < k; i++) { if((x[i] == j) || (x[k-i] == j+i) || (x[k-i] == j-i)) return false; } return true; } bool queen(int k, int n) { int j; for(j = 1; j <= n; j++) { if(place(k, j)) { x[k] = j; if(k == n) return true; else if(queen(k+1, n)) return true; else { x[k] = 0; continue; } } } return false; } void main() { int n, k; printf("请输入棋盘大小:"); scanf("%d", &n); for(k = 1; k <= n; k++) queen(k, n); for(k = 1; k <= n; k++) printf("第%d行排在第%d列\n", k, x[k]); } ``` **解析**: - 本程序使用递归的方式来解决N皇后问题。 - 通过`place`函数检查当前放置皇后的位置是否合法。 - 通过`queen`函数进行递归搜索,寻找所有可能的解决方案。 - 主函数中输入棋盘大小,并输出所有皇后的摆放位置。 #### 三、病人挂号系统 **知识点**: - **数据结构**:利用链表等数据结构来管理病人信息。 - **链表操作**:包括创建、插入、删除等基本操作。 **代码解析**: ```c #include "iostream.h" struct patient { int num; char name[10]; char sex[6]; int age; patient *next; }; void main() { patient *head = NULL, *tail = NULL; patient *p, *q, *temp; char choice, choice2; L1: cout << "挂号请输入A;" << endl << "插入请..."; } ``` **解析**: - 本程序设计了一个简单的病人挂号系统,利用链表来存储病人的信息。 - 结构体`patient`定义了病人的基本信息及其指针`next`用于链接下一个节点。 - 程序通过菜单选择进行不同的操作,如挂号和插入等。 - 然而,给出的代码片段并不完整,缺少具体的实现逻辑部分,无法进一步解析。 以上是针对标题“C语言、C++编程作品集合”中的几个代表性的编程实例的知识点总结。每个实例都涉及到了一些重要的编程概念和技术,例如动态规划、递归、链表等。这些技术在实际编程中非常有用,掌握它们对于提升编程技能至关重要。



















剩余47页未读,继续阅读


- 粉丝: 31
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 三位厦门大学的学生面对小学期的python大作业他们将用什么样的作品水水而过
- QT6 画家 QPainter 的源代码带注释 1300 行 本类奠定了 QT 的绘图基础
- 基于 MySQL 与 Python 的选课大作业及校招填表辅助系统
- 网站建设方案(人才网).doc
- 新建文件夹福建省莆田市基于云计算的电子政务公共平台顶层设计【阶段成果】v1.5.doc
- 行业网站建设方案.doc
- 基于JSP的酒店客房管理系统.doc
- 武汉大学分析化学课件-第26章-分析仪器测量电路、信号处理及计算机应用基础.ppt
- 基于网络环境的集体备课研究课题研究报告.docx
- 网络营销SEO精简版.pptx
- 软件委托开发流程及相关规范(211215095509).pdf
- 数控铣床加工中心编程实例PPT培训课件.ppt
- 计算机网络基础(继续教育试题及答案).docx
- 网络会计对传统会计的影响及发展【会计实务操作教程】.pptx
- 行政事业单位会计信息化建设路径.doc
- 网络营销内涵.pptx


