算法程序
- 格式:doc
- 大小:66.50 KB
- 文档页数:10
算法与程序的区别
算法就是计算或者解决问题的步骤。
可以想象成⾷谱,要做出特定的料理,就需要遵循上⾯的⾷谱步骤。
同样,如果想⽤计算机解决特定问题,就需要遵循算法。
特定的问题很多,⽐如“将随意排列的数字按从⼩到⼤的排序重新排列”、“寻找出发点到⽬的地的最短路径”等等。
⾷谱和算法的最⼤区别就是算法是严密的。
⾷谱上经常会出现描述得⽐较模糊的部分,⽽算法是⽤数学形式来描述的,所以⼗分明确。
算法和程序有相似的,区别在于程序是以计算机能够理解的编程语⾔编写⽽成的,可以在计算机上运⾏,⽽算法是以⼈类能够理解的⽅法描述的,⽤于编写程序之前。
不过在这个过程中到哪⾥为⽌是算法,从哪⾥开始是程序,并没有明确的界限。
就算使⽤同⼀个算法、编程语⾔不同,写出来的程序也不同;即便使⽤相同的编程语⾔,写程序的⼈不同,写出来的程序也不同。
C语言常用算法程序汇总C语言是一门广泛应用于计算机编程的语言,具有较高的效率和灵活性。
在C语言中,常见的算法程序包括排序算法、查找算法、递归算法等等。
以下是一些常用的C语言算法程序的汇总:1.排序算法:-冒泡排序:通过多次迭代比较相邻元素并交换位置,将最大的元素逐渐移动到正确的位置。
-插入排序:将待排序的元素与已排序的部分依次比较并插入到正确的位置。
-选择排序:每次从待排序的元素中选择最小的元素并与已排序的部分交换位置。
-快速排序:通过选择一个基准元素,将数组划分为两个子数组进行递归排序。
2.查找算法:-顺序查找:逐个比较数组中的元素,直到找到目标元素或到数组末尾。
-二分查找:通过比较目标元素与数组中间元素的大小,逐步缩小范围,直到找到目标元素。
-哈希查找:通过散列函数将目标元素映射到哈希表的索引位置进行查找。
3.递归算法:-阶乘:通过递归调用自身计算一个正整数的阶乘。
-斐波那契数列:通过递归调用自身计算斐波那契数列的第n个数。
-二叉树遍历:通过递归调用自身遍历二叉树的各个节点。
4.图算法:- 最短路径算法:如Dijkstra算法和Floyd算法,用于计算图中两个节点之间的最短路径。
-拓扑排序:通过对有向无环图进行排序,使得所有的边从排在前面的节点指向排在后面的节点。
- 最小生成树:如Prim算法和Kruskal算法,用于找到图中连接所有节点的最小子树。
5.动态规划:-最长公共子序列:通过寻找两个字符串中的最长公共子序列,解决字符串匹配问题。
-背包问题:通过动态规划解决在给定容量下选取物品使得总价值最大的问题。
-最大子序列和:通过动态规划解决一个数组中选取连续子序列使得和最大的问题。
以上只是一些C语言中常用的算法程序的汇总,实际上,还有很多其他的算法,如逆波兰表达式、霍夫曼编码、最小割等等。
通过学习这些算法,可以更好地理解C语言的应用和开发。
C程序设计的常用算法算法(Algorithm):计算机解题的基本思想方法和步骤。
算法的描述:是对要解决一个问题或要完成一项任务所采取的方法和步骤的描述,包括需要什么数据(输入什么数据、输出什么结果)、采用什么结构、使用什么语句以及如何安排这些语句等。
通常使用自然语言、结构化流程图、伪代码等来描述算法。
一、简单数值类算法此类问题都要使用循环,要注意根据问题确定循环变量的初值、终值或结束条件,更要注意用来表示计数、和、阶乘的变量的初值。
1、求阶乘:n!=1*2*384…..*n; n!= n*(n-1)!=下列程序用于求n的阶乘.在累乘之前,一定要将用于存放乘积的变量的值初始化为1.long func(int n){int i;long t=1;for(i=2;i<=n;i++)t*=i;return t;}printf("\n");}main(){ int n;scanf("%d", &n);printf("n!=%ld\n", fac(n));}2、整数拆分问题:把一个整数各个位上的数字存到数组中#define N 4 /* N代表整数位数*/viod split(int n, int a[ ])/* 1478: a[ 3]=8, a[2 ]=7, a[1 ]=4…*/{int i;for(i=N-1;i!=0; i--){ a[i]=n%10;n=n/10;}}main(){int i,m=1478,b[N-1];split(m, b);for(i=0;i<4; i++)printf(“%5d”, b[i]);}3、求整数的因子之和12=1*2*3*4 long factor(int n){int i;long sum=0;for(i=1;i<=n;i++)if(n%i= =0)sum+=i;return sum;}注意:因子包括1和自身。
什么是算法、程序、程序设计技术和软件算法、程序、程序设计技术和软件⒈算法算法是一系列解决问题的清晰指令,可以按照特定的顺序执行。
它们是解决复杂问题的基础,通常由一系列步骤组成,每个步骤都有明确的输入和输出。
算法可以用来解决各种问题,如排序、搜索、路径规划等。
⑴算法的特点- 清晰明确:算法应该以一种明确的方式描述问题的解决步骤,使其他人能够理解和实现。
- 输入输出:算法应该明确指定输入和输出的数据和格式,以确保正确性和一致性。
- 有限性:算法应该在有限的步骤之后终止,而不是无限循环。
- 确定性:在给定相同输入时,算法应该始终产生相同的输出。
- 可行性:算法应该能够在合理的时间内执行。
⑵常见的算法类型- 排序算法:将一组数据按照特定的顺序进行排列,如冒泡排序、快速排序、归并排序等。
- 搜索算法:在给定一组数据中查找特定值的位置,如线性搜索、二分搜索、哈希搜索等。
- 图算法:解决图论中的问题,如最短路径、最小树、拓扑排序等。
- 动态规划:将复杂问题分解成较小的子问题进行求解,然后将结果组合成最终的解。
- 递归算法:通过调用自身来解决问题,如斐波那契数列、汉诺塔等。
⒉程序程序是一组按照特定语法和结构编写的指令,用于执行特定的任务或操作。
它由一系列的语句组成,可以被计算机理解和执行。
程序通常用来实现算法,将解决问题的步骤转换为可以计算机理解的指令。
⑴程序语言程序语言是一种用于编写程序的形式化语言。
它定义了一组规则和语法,以指定程序的结构和行为。
常见的程序语言包括C、C++、Java、Python等。
每种程序语言都有其特定的语法和语义,可以用来实现不同类型的算法和解决各种问题。
⑵程序执行过程程序的执行过程包括以下步骤:- 编译:将程序源代码翻译成可执行的机器代码,可执行文件。
- 运行:在计算机上执行可执行文件,按照程序指令执行特定的任务。
- 调试:检测和修复程序中的错误和问题,以确保程序的正确性和稳定性。
⒊程序设计技术程序设计技术是一种用于设计和实现程序的方法和原则。
算法和程序关系
算法和程序是计算机科学中两个非常重要的概念。
算法是一种解决问题的方法,而程序则是实现算法的具体实现。
算法和程序之间有着密不可分的关系,没有算法就没有程序,没有程序就没有算法的实现。
算法是一种抽象的概念,它是一种解决问题的方法,可以用自然语言、流程图、伪代码等形式来描述。
算法是计算机科学中最基本的概念之一,它是计算机程序设计的基础。
算法的好坏直接影响程序的效率和质量。
程序是算法的具体实现,它是一组指令的集合,用来告诉计算机如何执行某个任务。
程序可以用各种编程语言来编写,如C、C++、Java、Python等。
程序的好坏取决于算法的好坏和编程人员的水平。
算法和程序之间的关系非常密切。
算法是程序的灵魂,程序是算法的具体实现。
一个好的算法可以让程序更加高效、简洁、易于维护和扩展。
而一个差的算法则会导致程序效率低下、代码冗长、难以维护和扩展。
在实际编程中,程序员需要根据具体的问题选择合适的算法,并将其转化为程序。
程序员需要对算法进行分析和优化,以提高程序的效率和质量。
同时,程序员还需要不断学习新的算法和技术,以应对不断变化的需求和挑战。
算法和程序是计算机科学中两个非常重要的概念,它们之间密不可分。
一个好的算法可以让程序更加高效、简洁、易于维护和扩展,而一个差的算法则会导致程序效率低下、代码冗长、难以维护和扩展。
因此,程序员需要不断学习和掌握新的算法和技术,以提高程序的效率和质量。
简述算法和程序的区别并举例说明
算法和程序的区别:
(1)两者定义不同。
算法是对特定问题求解步骤的描述,它是有限序列指令。
⽽程序是实现预期⽬的⽽进⾏操作的⼀系列语句和指令。
说通俗⼀些算法是解决⼀个问题的思路,程序,是解决这些问题所具体好写的代码。
算法没有语⾔界限。
他只是⼀个思路。
为实现相同的⼀个算法,⽤不同语⾔编写的程序会不⼀样。
(2)两者的书写规定不同。
程序必须⽤规定的程序设计语⾔来写,⽽算法很随意。
算法是⼀系列解决问题的清晰指令,也就是说,能够对⼀定规范的输⼊,在有限时间内获得所要求的输出。
算法常常含有重复的步骤和⼀些逻辑判断。
举例:输⼊:n个数的⼀个序列(a1,a2,a3......,an).
输出:输⼊序列的⼀个排列(a1`,a2`,a3`,...,an`)满⾜ a1`<=a2`<=a3`<=...<=an`;
例如:给定输⼊序列(31,41,59,26,41,58)排序算法将返回序列(26,31,41,41,58,59)作为输出。
这样的输⼊序列称为排序问题的⼀个实例,⼀般来说,问题实例由计算该问题所必须的(满⾜问题中陈述中加的各种约束)输⼊组成。
c常用算法程序集C常用算法程序集一、排序算法排序算法是计算机科学中最基本、最常用的算法之一,常用于按照一定的规则将一组数据进行有序排列。
常见的排序算法有:冒泡排序、插入排序、选择排序、快速排序、归并排序等。
1. 冒泡排序:通过相邻元素的比较和交换来实现排序。
每一轮将最大的元素逐渐“冒泡”到末尾。
时间复杂度为O(n^2)。
2. 插入排序:将待排序的元素插入已排好序的部分,从而达到排序的目的。
时间复杂度为O(n^2),但在部分有序的情况下表现较好。
3. 选择排序:每一轮从待排序的元素中选出最小(或最大)的元素放到已排序的末尾。
时间复杂度为O(n^2),性能较差。
4. 快速排序:通过一趟排序将待排序的序列分割成两部分,其中一部分的所有元素都比另一部分小。
再分别对两部分进行排序,递归地进行下去。
时间复杂度为O(nlogn),性能较好。
5. 归并排序:将待排序的序列分成若干个子序列,分别进行排序,然后再将排好序的子序列合并。
时间复杂度为O(nlogn),稳定且效率较高。
二、查找算法查找算法是在给定的数据集中寻找特定元素的过程,常用于在大规模数据中快速定位目标元素。
常见的查找算法有:顺序查找、二分查找、哈希查找等。
1. 顺序查找:逐个遍历待查找的元素,直到找到目标元素或遍历完整个数据集。
时间复杂度为O(n),适用于小规模数据集。
2. 二分查找:在有序的数据集中,将目标元素与中间元素进行比较,缩小查找范围,直到找到目标元素或范围为空。
时间复杂度为O(logn),适用于大规模数据集。
3. 哈希查找:利用哈希函数将元素映射到一个确定的位置,通过该位置快速查找目标元素。
时间复杂度为O(1),但需要额外的空间存储哈希表。
三、图算法图算法用于解决图论中的问题,常用于描述事物之间的关系和网络结构。
常见的图算法有:深度优先搜索(DFS)、广度优先搜索(BFS)、最短路径算法(Dijkstra算法、Floyd-Warshall算法)等。
算法的程序实现——解析法、穷举法一、目标导学:1、认识并学会使用解析法、穷举法分析问题、解决问题;2、尝试编程实现解析法、穷举法实例。
二、自主探究:1、解析法:就是在分析具体问题的基础上,抽取出一个数学模型,这个数学模型能用若干解析表达式表示出来,解决了这些表达式,问题也就得以解决。
用解析法解决问题的关键是寻找________________。
☆实例:画钻石图案(如右图,教师机展示)分析:钻石图案是由一个圆周上的各个点的连线组成的,要首先建立一个坐标系,并求出各个点的坐标,然后画线(line方法)。
如右图:可以得出第一个点的坐标是(r*cos(θ),r*sin(θ)),第二个点的坐标是(r*cos(2*θ),r*sin(2*θ)),……依次类推,可得出所有点的坐标。
实现:(1)设置界面。
在form1上添加picture1和command1。
设置picture1的height和width属性相等,command1的caption属性为“绘制钻石”。
(2)双击command1按钮,打开其代码窗口,输入相关代码。
运行验证。
Private Sub Command1_Click() Const pi = 3.14159265Dim i As Integer, j As IntegerDim x1 As Single, y1 As Single Dim x2 As Single, y2 As Single Dim a As SingleDim r As SingleDim nodes As IntegerPicture1.Scale (-1.5, 1.5)-(1.5, -1.5) Picture1.Clsr = 1nodes = 15a = 2 * pi / nodes For i = 1 To nodesx1 = r * Cos(a * i)y1 = r * Sin(a * i)For j = 1 To nodesIf i <> j Thenx2 = r * Cos(a * j)y2 = r * Sin(a * j)Picture1.Line (x1, y1)-(x2, y2), vbBlue End IfNext jNext IEnd Sub2、穷举法:(枚举法、列举法)将求解对象一一列举出来,然后逐一加以分析、处理,并验证结果是否满足给定的条件,穷举完所有对象,问题最终得以解决。
算法程序设计知识点汇总算法与程序设计知识点汇总第一章计算机解决咨询题的基本过程一、开始分析咨询题设计算法编写程序调试、运行程序咨询题解决二、算法-----程序设计的“灵魂”1、定义:算是解决咨询题的办法和步骤 21、确定性:每一步都有确切的含义2、有穷性:执行的步骤和每一步执行的时刻基本上有限的3、输入:有零个或多个输入4、输出:至少产生一具输出5、可行性:原则上可精确运行3、算法的描述:1、自然语言 2、流程图(P11) 3、伪代码(p12)4、计算机语言三:程序设计语言的进展:须通过转换处理。
高级语言:更接近于自然语言(英语)和数学语言的编程语言,容易掌握和使用,也别能直截了当识不,必须通过转换才干被计算机执行。
第二章一、visiual basic 可视化程序开辟工具,要紧是让程序设计人员利用软件本身所提供的各种控件,像搭积木一样构造应用程序的各种界面,然后再编写少量的代码就能够构建应用程序,提供了程序设计,编辑,调试,运行于一体的集成开辟环境。
二、VB6.0的集成开辟环境三个工作栏:标题栏菜单栏工具栏六个基本窗口:主窗口(main) 窗体窗口(form) 工具箱窗口(toolbox)工程窗口(project) 属性窗口(properties) 窗体布局窗口(formlayout)三、属性---用来描述对象的外部特征四、常用控件熟悉常用控件(标签、文本框、命令按钮)的作用,图标及其属性五、数据的表示与处理 1、Vb 数据类型2、常量与变量的讲明:常量讲明:Const a=3.14 const a as single=3.14变量讲明: Dim a As integerDim b As integerDim a,b As integer3、运算符(1) 算术运算符(2)字符串运算符&、+字符串连接" 123 " + " 456 "结果 " 123456 "" 123 " & " 456 " 结果 " 123456 "区不: + 两边必须是字符串, & 别一定例如:"abcdef" & 12345 ' 结果为 "abcdef12345 ""abcdef " + 12345 ' 出错"123" & 456 ' 结果为" 123456 "“123” + 456 ' 结果为 579注意:"123 " + True'结果为 122True转换为数值-1,False转换为数值0(3)关系运算符a、将两个操作数举行大小比较,结果为逻辑量。
数据结构六个主要算法程序(c版)(总8页)-CAL-FENGHAI.-(YICAI)-Company One1-CAL-本页仅作为文档封面,使用请直接删除1.顺序表#include<>#include<>typedef struct{int num;char name[20];}Sqstu;Sqstu stu[4];Sqstu stud;void creat();void insert();void del();void main(){creat();printf("请输入要插入学生的信息:\n");insert();printf("请输入要删除学生的学号:\n");del();}void creat(){int i;for(i=0;i<3;i++)scanf("%d%s",&stu[i].num,stu[i].name);printf("学生的信息为:\n");for(i=0;i<3;i++)printf("%-10d%s\n",stu[i].num,stu[i].name); }void insert(){int i,j;scanf("%d%s",&,;for(i=0;>stu[i].num;i++)j=i;for(i=3;i>j;i--){stu[i].num=stu[i-1].num;strcpy(stu[i].name,stu[i-1].name);}stu[j+1].num=;strcpy(stu[j+1].name,;printf("现在,学生的信息为:\n");for(i=0;i<4;i++)printf("%-10d%s\n",stu[i].num,stu[i].name); }void del(){int i;scanf("%d",&;for(i=0;!=stu[i].num;i++)i=i;for(i;i<4;i++){stu[i]=stu[i+1];}printf("现在,学生的信息为:\n");for(i=0;i<3;i++)printf("%-10d%s\n",stu[i].num,stu[i].name); }2.链表#include<>#include<>#define NULL 0#define LEN sizeof(struct student)struct student{int num;char name[20];struct student * next;};int n;struct student * creat(){struct student * head;struct student * p1, * p2;n=0;p1=p2=( struct student * ) malloc(LEN);scanf("%d%s",&p1->num,p1->name);head=NULL;while (p1->num != 0){n=n + 1;if(n==1)head=p1;elsep2->next=p1;p2=p1;p1=(struct student * )malloc(LEN);scanf("%d%s",&p1->num,p1->name);}p2->next=NULL;return head;}void print(struct student * head){struct student * p;printf("\n Now, These %d records are: \n",n);p=head;if (head != NULL)do{printf("%d,%s\n",p->num,p->name );p=p->next;}while (p != NULL);}struct student * insert(struct student * head,struct student * stud) {struct student * p0, * p1, * p2;p1=head;p0=stud;if (head==NULL){head=p0;p0->next=NULL;}else{while ((p0->num > p1->num) && (p1->next != NULL)){p2=p1;p1=p1->next;}if (p0->num <= p1->num){if (head == p1)head=p0;elsep2->next=p0;p0->next=p1;}else{p1->next=p0;p0->next=NULL;}}n=n+1;return head;}struct student * del(struct student * head,int num) {struct student * p1, * p2;p1=head;if (head==NULL){printf("\n list null! \n");return head;}while ((num != p1->num) && (p1->next != NULL)){p2=p1;p1=p1->next;}if (num == p1->num){if(p1==head)head=p1->next;elsep2->next=p1->next;printf("delete:%d\n",num);n=n - 1;}elseprintf("%d not been found! \n",num);return head;}void main(){struct student * head, * stu;int del_num;printf("input records: \n");head=creat();print(head);printf("\n input the inserted record: ");stu=( struct student * ) malloc(LEN);scanf("%d%s",&stu->num,stu->name);head=insert(head,stu);print(head);printf("\n input the deleted number:");scanf("%d",&del_num);head=del(head,del_num);print(head);}3.栈#include<>#define MaxSize 3typedef struct{int data[MaxSize];int top;}Stack;void InitStack(Stack &S) 序中序递归算法#include<>#include<>#define NULL 0typedef struct node{int data;struct node * lchild;struct node * rchild;}BiTNode,* BiTree;void createBinTree(BiTree &T) //创建二叉树{int i;scanf("%d",&i);if (i == 0)T = NULL;else{T = (BiTree)malloc(sizeof(BiTree));T->data = i;createBinTree(T->lchild); //构造左子树createBinTree(T->rchild); //构造右子树}}void preorder(BiTree T) //先序遍历二叉树{if (T){printf("%-10d",T->data);preorder(T->lchild);preorder(T->rchild);}}void inorder(BiTree T) //中序遍历二叉树{if (T){inorder(T->lchild);printf("%-10d",T->data);inorder(T->rchild);}}void main(){BiTree T;char ch1,ch2;printf("\n欢迎进入二叉树基本操作测试程序,请选择:\n");ch1 = 'y';while (ch1 == 'y'){printf("\na----------二叉树建立");printf("\nb----------先序遍历");printf("\nc----------中序遍历");printf("\nq----------退出\n");scanf("\n%c",&ch2);switch (ch2){case 'a':printf("请输入按先序建立二叉树的节点序列:\n");createBinTree(T);break;case 'b':printf("该二叉树的先序遍历序列为:\n");preorder(T);break;case 'c':printf("该二叉树的中序遍历序列为:\n");inorder(T);break;case 'q':ch1 = 'n';break;default:printf("输入无效,请重新选择需要的操作!\n");}}}。
算法和程序关系算法和程序是密不可分的。
算法是一个解决问题的步骤序列,而程序是将算法转化为计算机可以识别和执行的指令序列。
简单地说,算法是一个思维过程,程序是算法在计算机上的实现。
算法是一个计算机科学中的基础概念,它描述了一个问题的解决步骤。
一个算法可以用自然语言等形式描述,但为了让计算机执行算法,需要将算法转化为计算机可以识别的形式。
程序则是算法的一种实现形式,它将算法转化为计算机可以执行的指令序列。
一个程序可以用程序语言编写,比如Java、C++等等,这些语言提供了一种将算法转化为程序的标准形式。
程序语言是程序员和计算机之间的桥梁,程序员使用程序语言将算法转化为计算机可以执行的形式。
算法和程序之间相互影响。
算法的好坏直接影响程序的效率和正确性。
例如,在排序算法中,快速排序算法的效率比冒泡排序算法高,这意味着使用快速排序算法实现的程序会更快地响应用户的请求。
如果算法有误,程序可能会产生错误的结果。
因此,在编写程序之前,必须正确地定义和实现算法。
有时候,通过改进算法可以提高程序的效率。
不同算法可以实现同一个功能,不同程序可以实现同一个算法。
例如,求斐波那契数列的算法有多种,比如递归算法、动态规划算法等等,这些算法都可以使用不同的程序实现。
不同的程序可能具有不同的效率、可读性、可维护性和可扩展性。
因此,在编写程序时,程序员需要选择适合当前任务的最佳算法和最佳程序。
算法和程序是计算机科学中的核心概念,它们是计算机领域里最基本的思想。
在设计和编写程序时,程序员需要将算法转化为可执行的程序,而算法选择的好坏关系到程序的效率和正确性。
因此,了解算法和程序之间的关系,对于计算机科学专业的学生和程序员来说是非常重要的。
算法和程序关系
算法和程序是紧密相关的概念,它们之间存在着密不可分的关系。
简单来说,算法是一组指令或者规则,用来解决特定问题的步骤。
而程序则是包含这些算法的具体实现方式,以及用来执行这些算法的计算机语言。
换句话说,算法是程序的核心,程序则是算法的具体表现形式。
在计算机科学中,算法通常是需要被精确定义的。
而程序则是算法的具体实现形式,需要考虑到各种细节和实际环境下的限制。
因此,在实际应用中,一个好的算法必须能够被转化为一个高效、可靠的程序。
算法和程序的关系可以用一个简单的比喻来说明:算法就像是菜谱,而程序就像是烹饪这道菜的厨师。
菜谱提供了每一步骤的详细说明,但是如何在实际烹饪过程中掌握火候、配料比例等细节,则需要有经验的厨师来完成。
因此,对于程序员来说,掌握好算法是非常重要的。
只有理解了算法的本质,才能写出高效、可靠的程序。
同时,在实际编码过程中,也需要灵活运用各种数据结构和算法,以便更好地完成各种任务。
综上所述,算法和程序是密不可分的概念。
算法是程序的核心,程序则是算法的具体实现方式。
掌握好算法,是写出高效、可靠程序的关键。
- 1 -。
排序问题P11#include<iostream>using namespace std;inline void swap(int &a,int&b){int temp=a;a=b;b=temp;}void perm(int list[],int k,int m){if(k==m){for(int i=0;i<=m;i++) cout<<list[i];cout<<endl;}elsefor(int i=k;i<=m;i++){swap(list[k],list[i]);perm(list,k+1,m);swap(list[k],list[i]);}}void main(){int a[10],n;cout<<"请输入要排列的数的个数:";cin>>n;for(int i=0;i<n;i++)cin>>a[i];perm(a,0,n-1);}二分搜索P16#include<iostream.h>int n,i,j; int a[1000];void xuanzhe(){int i, j, min, t;for (i=0; i<n-1; i++){min = i;for (j=i+1; j<n; j++){if (a[j] < a[min]){min = j;}}if (min != i){t = a[i];a[i] = a[min];a[min] = t;}}}int BinarySearch(int x){int left=0;int right=n-1;while(left<=right){int middle=(left+right)/2;if (x==a[middle]) return middle;if (x>a[middle]) left=middle+1;else right=middle-1;}return -1;}void main(){cout<<"输入数字的个数:"<<endl;cin>>n;for(i=0;i<n;i++)cin>>a[i];xuanzhe();cout<<"请输入要查找的数:";cin>>j;int m=BinarySearch(j);if(m==-1)cout<<"没有你要找的数"<<endl;elsecout<<"你要找的数在数组中的第"<<m+1<<"个"<<endl; }棋盘覆盖P13(应用,运行的的结果的图会画,标数字)#include<iostream.h>int tile=1;int board[100][100];void chessBoard(int tr,int tc,int dr,int dc,int size){if(size==1)return;int t=tile++;int s=size/2;if(dr<tr+s && dc<tc+s)chessBoard(tr, tc, dr, dc, s);else{board[tr+s-1][tc+s-1]=t;chessBoard(tr, tc, tr+s-1, tc+s-1, s);}if(dr<tr+s && dc>=tc+s)chessBoard(tr, tc+s, dr, dc, s);else{board[tr+s-1][tc+s]=t;chessBoard(tr, tc+s, tr+s-1, tc+s, s);}if(dr>=tr+s && dc<tc+s)chessBoard(tr+s, tc, dr, dc, s);else{board[tr+s][tc+s-1]=t;chessBoard(tr+s, tc, tr+s, tc+s-1, s);}if(dr>=tr+s && dc>=tc+s)chessBoard(tr+s, tc+s, dr, dc, s);else{board[tr+s][tc+s]=t;chessBoard(tr+s, tc+s, tr+s, tc+s, s);}}void main(){int size;cout<<"输入棋盘的size(大小必须是2的n次幂): "; cin>>size;int index_x,index_y;cout<<"输入特殊方格位置的坐标: ";cin>>index_x>>index_y;chessBoard(0,0,index_x,index_y,size);for(int i=0;i<size;i++){for(int j=0;j<size;j++)cout<<board[i][j]<<"\t";cout<<endl;}}石子合并问题P90#include <iostream>using namespace std;int Fx[200][200],Fn[200][200],Arr[200];int i,j,k,Temp,Maxm,Minm,N;int main(){while(cin>> N){for(i=1;i<=N;i++){cin>> Temp;Arr[i]=Arr[i-1]+Temp;Arr[i+N]=Temp;}for(i=N+1;i<=2*N;i++)Arr[i]=Arr[i-1]+Arr[i];for(k=1;k<=N-1;k++)for(i=1;i<=2*N-k;i++){Maxm=0;Minm=765432100;for(j=i+1;j<=i+k;j++){Temp=Arr[i+k]-Arr[i-1]+Fx[i][j-1]+Fx[j][i+k]; if (Temp > Maxm)Maxm=Temp;Temp=Arr[i+k]-Arr[i-1]+Fn[i][j-1]+Fn[j][i+k]; if(Temp<Minm)Minm=Temp;}Fx[i][i+k]=Maxm;Fn[i][i+k]=Minm;}Maxm=0;Minm=765432100;for(i=1;i<=N;i++){if (Fx[i][i+N-1] > Maxm) Maxm=Fx[i][i+N-1];if (Fn[i][i+N-1] < Minm) Minm=Fn[i][i+N-1];}cout<< Minm <<endl;cout<< Maxm <<endl;}return 0;}数字三角形P90#include<iostream>using namespace std;int main (){int n,i,j,k;int a[102][102]={0};int c[102]={0};int d[102]={0};int max;cin>>n;for (i=1;i<=n;i++)for (j=1;j<=i;j++)cin>>a[i][j];for (i=1;i<=n;i++) {for (k=1;k<=i;k++){d[k]=c[k-1]>c[k]?c[k-1]:c[k]; d[k]+=a[i][k];}for(j=1;j<k;j++){c[j]=d[j];}}max=0;for(i=1;i<=n;i++){if(c[i]>max) max=c[i];}cout<<max;return 0;}租用游艇P91#include<iostream>using namespace std;#define N 201int f[N][N];int n;void init(){int i,j;for(i=0;i<n;i++)for(j=0;j<n;j++) f[i][j]=0;cout<<"请输入每两站之间的租金:"<<endl;for(i=0;i<n-1;i++)for(j=i+1;j<n;j++) cin>>f[i][j];}void dyna(){for(int k=2;k<n;k++)for(int i=0;i<n-k;i++){int j=i+k;for(int p=i+1;p<j;p++){int temp=f[i][p]+f[p][j];if(f[i][j]>temp) f[i][j]=temp;}}}int main(){cout<<"请输入游艇站的个数:";cin>>n;init();dyna();cout<<f[0][n-1]<<endl;return 0;}数量极差P133#include<iostream>using namespace std;long int a[5000]={0},b[5000]={0};void quicksort(int low,int high){int mid=a[(low+high)/2],i=low,j=high,t;while(i<=j){while(a[i]<mid)i++;while(a[j]>mid)j--;if(i<=j){t=a[i];a[i]=a[j];a[j]=t;i++;j--;}}if(low<j)quicksort(low,j);if(high>i)quicksort(i,high);}int main(){long int i,j,n,maxx=0,minn=0;cout<<"请输入正整数个数:";cin>>n;for(i=1;i<=n;i++) cin>>a[i];quicksort(1,n);for(i=1;i<=n;i++)b[i]=a[i];i=2;while(i<=n){maxx=a[i-1]*a[i]+1;if(i==n)break;j=i;while(a[j+1]<maxx&&j+1<=n){a[j]=a[j+1];j++;}a[j]=maxx;i++;}i=n-1;while(i>=1){minn=b[i+1]*b[i]+1;if(i==1)break;j=i;while(b[j-1]>minn&&j-1>=1)j--;b[j]=minn;i--;}cout<<"数列极差是:"<<maxx-minn<<endl;return 0;}N后问题#include<iostream>using namespace std;#include<iostream>using namespace std;class Queen{friend int nQueen(int);private:bool Place(int k);void Backtract(int t);int n,*x;long sum;};bool Queen::Place(int k){for(int j=1;j<k;j++)if((abs(k-j)==abs(x[j]-x[k]))||(x[j]==x[k]))return false;return true;}void Queen::Backtract(int t){if (t>n){sum++;cout<<"第"<<sum<<"种方法:";for(int i=1;i<=n;i++)cout<<x[i]<<" ";cout<<endl;}else{for(int i=1;i<=n;i++){x[t]=i;if(Place(t)) Backtract(t+1);}}}int nQueen(int n){Queen X;X.n=n;X.sum=0;int *p=new int[n+1];for(int i=0;i<=n;i++)p[i]=0;X.x=p;X.Backtract(1);delete []p;return X.sum;}void main(){int n,m;cout<<"请输入皇后个数:";cin>>n;m=nQueen(n);cout<<endl;cout<<"有"<<m<<"种可行方法"<<endl; }图的m着色问题P163#include<iostream>using namespace std;const int N=10;int a[N][N];class Color{friend int mColoring(int ,int );private:bool OK(int k);void Backtrack(int k);int n,m,*x;long sum;};bool Color::OK(int k){for(int j=1;j<=n;j++)if((a[k][j]==1) && x[j]==x[k])return false;return true;}void Color::Backtrack(int t){if(t>n){sum++;for(int i=1;i<=n;i++)cout<<x[i]<<'\t';cout<<endl;}elsefor(int j=1;j<=m;j++){x[t]=j;if(OK(t)) Backtrack(t+1);x[t]=0;}}int mColoring(int n,int m){Color X;X.n=n;X.m=m;X.sum=0;int *p=new int [n+1];for(int i=0;i<=n;i++)p[i]=0;X.x=p;X.Backtrack(1);delete [] p;return X.sum;}int main(){int n,m,t;int i,j;cout<<"输入图中顶点的个数"<<endl;cin>>n;cout<<"输入颜色的种数:"<<endl;cin>>m;cout<<"输入图的邻接矩阵"<<endl;for(i=1;i<=n;i++)for(j=1;j<=n;j++)cin>>a[i][j];cout<<endl;t=mColoring(n,m);if(t)cout<<"可行方案个数:"<<t<<endl;elsecout<<"这个图不是m="<<m<<"可着色的"<<endl; return 0;}。