第1章:绪论

article/2025/9/30 8:15:02

第1章:绪论

1、三数交换

/**********
【题目】试写一算法,如果三个整数a,b和c的值
不是依次非递增的,则通过交换,令其为非递增。
***********/
void Descend(int &a, int &b, int &c) //这里的引用改变a的值也会改变n的值
/* 通过交换,令 a >= b >= c */
{/*这里的&a是说给一个变量起一个别名,a的值改变,原变量即实参的值也改变,但是在dev c++编译不通过*/int temp;if(a < b){temp = a;a = b;b = temp;}if(a < c){temp = a;a = c;c = temp;}if(b < c){temp = b;b = c;c = temp;}
}

2、一元多项式求值

/**********
【题目】试编写算法求一元多项式P(x) = a0 + a1x + a2x^2 + ... + anx^n
的值P(x0),并确定算法中每一语句的执行次数和整个算法
的时间复杂度。
**********/
float Polynomial(int n, int a[], float x)
/* 求一元多项式的值P(x)。                  */
/* 数组a的元素a[i]为i次项的系数,i=0,...,n */
{int i;float sum;if(n == 0){sum = a[0];return  sum;//处理只有a0的情况}   sum = a[n] * x + a[n-1];for(i = n-2;i >= 0 ;i --){sum =  sum * x + a[i] ;//秦九韶算法}return sum;
}

3、k阶斐波那契序列

/**********
【题目】已知k阶裴波那契序列的定义为f(0)=0, f(1)=0, ..., f(k-2)=0, f(k-1)=1;f(n)=f(n-1)+f(n-2)+...+f(n-k), n=k,k+1,...
试编写求k阶裴波那契序列的第m项值的函数算法,
k和m均以值调用的形式在函数参数表中出现。
**********/
Status Fibonacci(int k, int m, int &f) 
/* 求k阶斐波那契序列的第m项的值f,如果能求得,返回OK */
/*否则(如参数k与m不合理),返回ERROR*/
{//这里的序列定义跟斐波那契数列不太一样//K不可以为1,因为f(k-2)=0,至少大于等于2//k-1项总为1,第k项往后等于前面k项之和//如K = 3,则f(k)=f(2)+f(1)+f(0);if(k < 2 || m < 0){return ERROR;} //前k-2项都为0int i,j,t[100] = {0,0},sum = 0;if(m < k-1) f = 0; else if(m == k-1) f = 1;else {t[k-1] = 1;//k-1项为1for(i = k;i <= m;i ++){//给第k项~m项赋值for(j = i - k;j < i;j ++){sum += t[j];//前k项之和}t[i] = sum;//赋值给第k项~m项sum = 0;//记得归零}f = t[m];       }return OK;
}

优化

  • 上面的当求第m+1项后明显有问题,而且用来双重循环,耗费时间也比较多,因此优化为下面的解法,可以求出任意项的值,而且只用了一次循环.
Status Fibonacci(int k, int m, int &f) 
/* 求k阶斐波那契序列的第m项的值f,如果能求得,返回OK */
/*否则(如参数k与m不合理),返回ERROR*/
{    if(k < 2 || m < 0){return ERROR;} //前k-2项都为0int i,j,sum = 0;int *t;/*注意是开辟m+1长度的数组*/t = (int *)malloc(sizeof(int)*(m+1));t[0] = 0;for(i = 1;i <= m;i ++){/*减去多出来的那一项f(i-k-1)*/if(i > k-1) sum -= t[i-k-1];if(i < k-1) t[i] = 0;else if(i == k-1) t[i] = 1;/*赋值给t[i]*/else    t[i] = sum;/*加上t[i]作为下一项t[i+1]的值*/sum += t[i];}f = t[m];       return OK;
}

4、计算i!*2^i的值

/**********
【题目】试编写算法,计算i!×2^i的值并存入数组
a[0..n-1]的第i-1个分量中 (i=1,2,…,n)。假设计
算机中允许的整数最大值为MAXINT,则当对某个k
(1≤k≤n)使k!×2^k>MAXINT时,应按出错处理。注意
选择你认为较好的出错处理方法。
**********/
Status Series(int a[], int n) 
/* 求i!*2^i序列的值并依次存入长度为n的数组a;     */
/* 若所有值均不超过MAXINT,则返回OK,否则OVERFLOW */
{int i,j = 1;Status sum = 1; //记得设sum为1而不是0for(i = 0;i < n;i ++){for(j = i + 1;j > 0;j --){sum *= j * 2;}if(sum > MAXINT){return OVERFLOW;} else{a[i] = sum;}sum = 1;}return OK;
}

优化

  • 上面的解法没有充分利用sum的值,其实下一次i!×2^i等于上一次的值乘以i*2,所以没必要用两层循环
Status Series(int a[], int n) 
/* 求i!*2^i序列的值并依次存入长度为n的数组a;     */
/* 若所有值均不超过MAXINT,则返回OK,否则OVERFLOW */
{int i,j = 1;Status sum = 1; //记得设sum为1而不是0for(i = 1;i <= n;i ++){sum *= i * 2;if(sum > MAXINT){return OVERFLOW;} else{a[i-1] = sum;}          }return OK;
}

5、统计男女总分及团体总分

/**********
【题目】假设有A、B、C、D、E五个高等院校进行田径对抗赛,
各院校的单项成绩均以存入计算机并构成一张表,表中每一行
的形式为:项目名称   性别   校名   成绩   得分
编写算法,处理上述表格,以统计各院校的男、女总分和团体
总分,并输出。相关数据类型定义如下:
typedef enum {female,male} Sex;
typedef struct{char *sport;     // 项目名称Sex  gender;     // 性别(女:female;男:male)char schoolname; // 校名为'A','B','C','D'或'E'char *result;    // 成绩int score;       // 得分(7,5,4,3,2或1)
} ResultType;typedef struct{int malescore;   // 男子总分int femalescore; // 女子总分int totalscore;  // 男女团体总分
} ScoreType;实现以下函数:
**********/
void Scores(ResultType *result, ScoreType *score)
/* 求各校的男、女总分和团体总分, 并依次存入数组score */
/* 假设比赛结果已经储存在result[ ]数组中,            */
/* 并以特殊记录 {"", male, ' ', "", 0 }(域scorce=0)*/
/* 表示结束                                          */
{int i = 0;for(i = 0;i < 5;i ++){score[i].malescore = 0;score[i].femalescore = 0;score[i].totalscore = 0; }for(i = 0;;i ++){if(strcmp(result[i].sport,"") == 0&& result[i].gender == male&& result[i].schoolname == ' '&& strcmp(result[i].result,"") == 0&& result[i].score == 0){break;} switch(result[i].schoolname){case 'A': {if(result[i].gender == male){score[0].malescore += result[i].score; }else{score[0].femalescore += result[i].score;} score[0].totalscore += result[i].score;break; }case 'B': {if(result[i].gender == male){score[1].malescore += result[i].score;}else{score[1].femalescore += result[i].score;} score[1].totalscore += result[i].score;break;}case 'C': {if(result[i].gender == male){score[2].malescore += result[i].score;}else{score[2].femalescore += result[i].score;} score[2].totalscore += result[i].score;break;}case 'D': {if(result[i].gender == male){score[3].malescore += result[i].score;}else{score[3].femalescore += result[i].score;} score[3].totalscore += result[i].score;break;}case 'E': {if(result[i].gender == male){score[4].malescore += result[i].score;}else{score[4].femalescore += result[i].score;} score[4].totalscore += result[i].score;break;}default:break;}}
}

优化

  • 以上解法case部分的代码高度重复,仅仅是下标不同,因此可以先设index记录它们的下标,然后将重复代码独立出来
void Scores(ResultType *result, ScoreType *score)
/* 求各校的男、女总分和团体总分, 并依次存入数组score */
/* 假设比赛结果已经储存在result[ ]数组中,            */
/* 并以特殊记录 {"", male, ' ', "", 0 }(域scorce=0)*/
/* 表示结束                                          */
{int i = 0;for(i = 0;i < 5;i ++){score[i].malescore = 0;score[i].femalescore = 0;score[i].totalscore = 0; }for(i = 0;;i ++){if(strcmp(result[i].sport,"") == 0&& result[i].gender == male&& result[i].schoolname == ' '&& strcmp(result[i].result,"") == 0&& result[i].score == 0){break;} int index = -1;switch(result[i].schoolname){case 'A': {index = 0;break; }case 'B': {index = 1;break;}case 'C': {index = 2;break;}case 'D': {index = 3;break;}case 'E': {index = 4;break;}default:break;}if(index != -1){if(result[i].gender == male){score[index].malescore += result[i].score;}else{score[index].femalescore += result[i].score;} score[index].totalscore += result[i].score;}        }
}

6、对序列S的第i个元素赋值e

/**********
【题目】试写一算法,对序列S的第i个元素赋以值e。
序列的类型定义为:
typedef struct {ElemType  *elem;int  length;
} Sequence;
***********/
Status Assign(Sequence &S, int i, ElemType e) 
/* 对序列S的第i个元素赋以值e,并返回OK。 */
/* 若S或i不合法,则赋值失败,返回ERROR   */
{if(&S == null){return ERROR ;}if(S.elem == null){return ERROR;} /*从第0个元素算起,因此当i等于length时就不合理了*/if(i < 0 || i >= S.length){return ERROR;}S.elem[i] = e;return OK;   
}

7、由长度为n的一维数组a构建一个序列S

/**********
【题目】试写一算法,由长度为n的一维数组a构建一个序列S。
序列的类型定义为:
typedef struct {ElemType  *elem;int  length;
} Sequence;
***********/
Status CreateSequence(Sequence &S, int n, ElemType *a) 
/* 由长度为n的一维数组a构建一个序列S,并返回OK。 */
/* 若构建失败,则返回ERROR                       */
{//这里不要忽略n等于0的情况(程序规定的)if(n <= 0||a == null){return ERROR;}S.length = n;S.elem = a;return OK;
}

8、构建一个值为x的结点

/**********
【题目】链表的结点和指针类型定义如下typedef struct LNode {ElemType  data;struct LNode *next;} LNode, *LinkList;
试写一函数,构建一个值为x的结点。
***********/
LinkList MakeNode(ElemType x)
/* 构建一个值为x的结点,并返回其指针。*/
/* 若构建失败,则返回NULL。           */
{    //代码一/*LinkList link ;link = (LinkList)malloc(sizeof(LNode));if(link == NULL) return NULL;link->data = x;link->next = NULL;return link;*///代码二LNode  link;link.data = x;link.next = NULL;return &link; 
}

9、构建长度为2且两个结点的值依次为x和y的链表

/**********
【题目】链表的结点和指针类型定义如下typedef struct LNode {ElemType  data;struct LNode *next;} LNode, *LinkList;
试写一函数,构建长度为2且两个结点的值依次为x和y的链表。
**********/
LinkList CreateLinkList(ElemType x, ElemType y) 
/* 构建其两个结点的值依次为x和y的链表。*/
/* 若构建失败,则返回NULL。            */
{LNode link;link.data = x;LinkList p;p = (LinkList)malloc(sizeof(LNode));if(p == NULL) return NULL;link.next = p;p->data = y;p->next = NULL;return &link;
}

10、构建长度为2的升序链表

/**********
【题目】链表的结点和指针类型定义如下typedef struct LNode {ElemType  data;struct LNode *next;} LNode, *LinkList;
试写一函数,构建长度为2的升序链表,两个结点的值
分别为x和y,但应小的在前,大的在后。
**********/
LinkList CreateOrdLList(ElemType x, ElemType y)
/* 构建长度为2的升序链表。  */
/* 若构建失败,则返回NULL。 */
{if(x > y){//不开辟新内存交换两个数x = x+y;y = x-y;x = x-y;}LNode link;link.data = x;LinkList p;p = (LinkList)malloc(sizeof(LNode));if(p == NULL) return NULL;link.next = p;p->data = y;p->next = NULL;return &link;
}

更多内容请关注微信公众号“默夜不孤”

扫码关注微信公众号


http://chatgpt.dhexx.cn/article/knkmHjFq.shtml

相关文章

第1章-背景与遗产

机器翻译结果&#xff0c;仅用于学习&#xff0c;不喜勿喷&#xff0c;原文档链接。 自 1998 年首次发布以来&#xff0c;Bluetooth 技术可以说已发展成为历史上最成功的双向无线标准。在无线标准业务中&#xff0c;成功通常被视为每年销售的芯片数量。在此基础上&#xff0c;…

第1章 初识C语言

目录 1. 语言的发展&#xff1a;2. C 语言国际标准3. 第一个C语言 程序4. 数据类型5. 常量、变量6. 局部变量、全局变量7. 字符串 转义字符 注释7.1 字符串7.2 转义字符7.3 注释 8. 常见关键字8.1 关键字 typedef8.2 关键字 static 9. #define 定义常量和宏10. #define 和 ty…

【笔记】第1章 绪论

A. 计算 一、计算 计算 对象&#xff1a;规律&#xff0c;技巧 目标&#xff1a;高效&#xff0c;低耗computer science – computing science例子 绳索计算机&#xff1a;勾股定理找垂线 尺规计算机&#xff1a;等分点—子程序 二、算法 1. 算法 计算 信息处理 借助…

第1章 NumPy基础

为何第1章介绍NumPy基础&#xff1f;在机器学习和深度学习中&#xff0c;图像、声音、文本等首先要数字化&#xff0c;如何实现数字化&#xff1f;数字化后如何处理&#xff1f;这些都涉及NumPy。NumPy是数据科学的通用语言&#xff0c;它是科学计算、矩阵运算、深度学习的基石…

第1章——初识MySQL

初识MySQL 文章目录 初识MySQL1.MySQL的概述1.1 MySQL的概念1.2 MySQL的特点1.3 相关知识 2.MySQL的初步使用&#xff08;基于黑窗口&#xff09;2.1 配置Path环境变量2.2 登录MySQL服务器&#xff08;1&#xff09;MySQL客户端方式&#xff08;2&#xff09;DOS命令方式 2.3 常…

复习javascript第1章

JavaScript 是全球最流行的编程语言。 JavaScript 是属于 Web 的编程语言。 JavaScript 很容易学习。 JavaScript 能够改变 HTML 内容 getElementById() 是多个 JavaScript HTML 方法之一。 本例使用该方法来“查找” id"demo" 的 HTML 元素&#xff0c;并把元素…

【NLP】第1章 什么是Transformers?

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

第1章 Python 顺序结构

文章目录 Educoder—第1章 Python 顺序结构第1关&#xff1a;Python顺序结构之无输入求多边形的面积第2关&#xff1a;Python顺序结构之无输入求平抛小球与抛出点之间的距离第3关&#xff1a;Python顺序结构之无输入求星期几第4关&#xff1a;Python顺序结构之有输入格式化输出…

【Word/word2007】将标题第1章改成第一章

问题&#xff1a;设置多级列表没有其他格式选的解决办法和带来的插入图注解的问题&#xff0c;将标题第1章改成第一章的问题其他方案。 按照百度搜索的方法设置第一章&#xff0c;可以是没有相应的样式可以选。 那就换到编号选项 设置新的编号值 先选是 然就是变得很丑 这时打开…

python教程第1章

python教程第1章 (1)python(2)IDEIDE是什么安装IDEVSCode第一步第二步第四步插件 海龟编辑器第一步第二步 (3)安装python下载安装包安装 (1)python 为什么python是一个成功的语言呢&#xff1f;正是因为它有非常强大的IDE。 (2)IDE IDE是什么 IDE是三个英文单词的缩写&…

第1章 介绍

介绍 正如业界众所周知的那样&#xff0c;28纳米及以下节点的设计复杂性正在爆炸式增长。小尺寸要求和高性能&#xff0c;低功耗和小面积的相互矛盾的要求导致了如此复杂的设计架构。多核&#xff0c;多线程和功耗&#xff0c;性能和面积&#xff08;PPA&#xff09;需求加剧了…

第1章 Python基础

目录 0. Jupyter Notebook简介 0.1 Jupyter Notebook简介及启动 0.1.1 Jupyter Notebook简介0.1.2 Jupyter Notebook安装与启动0.2 Jupyter Notebook里面的最常用的操作&#xff1a; 0.2.1 更改文件名0.2.2 模式切换0.2.3 命令模式快捷键0.2.4 查询帮助1. Python基础语法 1.1 编…

第1章 实践基础

文章目录 第1章 实践基础1.1 如何运行本书的代码1.1.1 本地运行1.1.1.1 环境准备1.1.1.2 快速安装 1.1.2 AI Studio运行 1.2 张量1.2.1 创建张量1.2.1.1 指定数据创建张量1.2.1.2 指定形状创建1.2.1.3 指定区间创建 1.2.2 张量的属性1.2.2.1 张量的形状1.2.2.2 形状的改变1.2.2…

第1章 Nginx简介

基于 Nginx版本 1.14.2 &#xff0c;Tomcat版本 9.0.0 演示 第1章 Nginx简介 1.1 Nginx发展介绍 Nginx &#xff08;engine x&#xff09; 是一个高性能的Web服务器和反向代理服务器&#xff0c;也可以作为邮件代理服务器。 Nginx 特点是占有内存少&#xff0c;并发处理能力…

第1章 多线程基础

第1章 多线程基础 1.1.2 线程与进程的关系 进程可以看成是线程的容器&#xff0c;而线程又可以看成是进程中的执行路径。 1.2 多线程启动 线程有两种启动方式&#xff1a;实现Runnable接口&#xff1b;继承Thread类并重写run()方法。 执行进程中的任务时才会产生线程&a…

第1章 Rust安装

Rust是一门安全的语言&#xff0c;最近也加入到Linux内核中&#xff0c;因此后续这门语言会越来越流行&#xff0c;所以准备学习下&#xff0c;本篇介绍Rust在Window平台上的安装过程。 目录 安装步骤 1.到官网下载安装包 2.搭建 Visual Studio Code 开发环境 安装步骤 1.…

第1章 概述

第一章 概述 考试范围&#xff1a; 1.1-1.10 考试内容&#xff1a; 章节后的Review Terms&#xff08;名词基本都在课文中&#xff09; 考试题型&#xff1a; 综合题 Review Terms Database-management system (DBMS) &#xff1a;A collection of interrelated data and a …

图书馆预约占座管理系统项目源码+文档+jsp+ssm+mysql

【项目功能描述】 【源码下载】 图书馆预约占座管理系统的开发技术为jspssmmysql&#xff0c;前端技术为jquery easyui框架&#xff0c;后台用的ssm&#xff08;spring、springMVC、mybaits&#xff09;框架&#xff0c;主要实现的功能有&#xff1a;用户管理、菜单管理、角色…

图书馆座位预约小程序系统设计与实现

项目背景和意义 目的&#xff1a;本课题主要目标是设计并能够实现一个基于微信小程序预约订座小程序&#xff0c;前台用户使用小程序&#xff0c;后台管理使用JavaMysql开发&#xff0c;后台使用了springboot框架&#xff1b;通过后台添加座位类型、座位号&#xff0c;用户通过…

【计算机毕业设计】基于微信小程序的图书馆座位预约系统

毕设帮助、源码交流及技术指导&#xff0c;见文末。 图书馆作为高校的学习宝地&#xff0c;有着不可替代的地位。但是在信息化时代&#xff0c;传统模式下的图书馆管理并不能满足用户需求。为解决图书馆学生占座问题严重、座位资源紧张的问题,设计了图书馆座位预约系统&#xf…