c语言算法课件,《C语言常见算法》PPT课件.ppt

一 素数、随机数、最大值和最小值 (1) 判断一个数是否为素数 素数:只能被1和它本身整除的数。 要判断一个正整数m是不是素数,需 要用大于1且小于它本身的正整数去除它 ,只要它能被其中的一个数整除,就说明 它不是素数。若所有的数都不能被它整除 ,说明它是素数。 例1:输出3—100之间的所有素数 main() { int i,n,k=0; for(n=3;nmax) max=a[i]; if(a[i]=1e-5) { x0=x; f=((2*x0-4)*x0+3)*x0-6; f1=(6*x0-8)*x0+3; x=x0-f/f1; } printf(“%10.8f \n“,x); } 四、数字分离 有些题中经常要求将一个数中的每一位 数字或者其中的某些位数字输出,就需要使 用到数字分离技术。 如在求解同构数等问题时都需要使用到 数字分离技术 例:给出一个不多于4位的正整数,要求:求出 它是几位数,并且按逆序打印出各位数字 main() { int i,j,k=0; scanf(“%d“, while(i!=0) { printf(“%4d“,i%10); i=i/10; k++; } printf(“\nk=%d\n“,k); } 四、以特殊字符做为终止标志 例:统计从键盘输入字符的个数,以'#'结束。 #include “stdio.h“ main() { char c; int i; c=getchar(); for(i=0; c!='#'; i++) c=getchar(); printf(“the number is:%d“,i); } 五、排序问题 常用的排序方法有四种: 顺序交换法、选择法、冒泡法、插入法 a.顺序排序法(n=10) 指导思想:先设定a[0]中存放最小值,然后用 a[0]分别与其后的每一个数a[j](j=19)进行比 较,在比较过程中如果发现有比a[0]小的数,就 将a[0]与a[j]互换,一遍扫描之后,a[0]就是10 个数中最小的数,重复此算法,只是每次比较 时,进行比较的数的范围向后移一个位置。反 复执行(n-1)次上述操作 例1:将数组a中的10个数按照由大到小的 顺序排好(使用顺序交换法) #define N 10 main( ) { int a[N],i,j,k,t; for(i=0;ix) break; /* 找到待插入的位置i */ for (j=n-1;j=i;j--) a[j+1]=a[j]; /* 从a[i]到a[n-1]之间的数组军后移一 位*/ a[i]=x; /*把数据x放到a[i]位置处*/ for (i=0;i=0;i --) if(str[i]==c) { for(k=i;str[k]!='\0';k++) str[k]=str[k+1]; str[k]='\0'; } puts(str); } 练习2、编写程序,比较两个字符串的 大小。(不能使用strcmp()函数) z比较规则:逐个字符进行比较,直到有 两个字符不等或有一个字符串结束为止 。 main() {char s1[80],s2[80]; int i,k; gets(s1); gets(s2); i=0; while(s1[i]!='\0' else i++; k=s1[i]-s2[i]; if(k0) printf(“s1s2\n“); else if(k0) printf(“s1s2\n“); else if(k0) printf(“s1s2\n“); else printf(“s1=s2\n“); } 练习3、判断一字符串是否为另一个字符串的子 串,若是则返回第一出现的起始位置,否则则 返回0 main() { static char s1[20]=“I love China!“; static char s2[20]=“love“; int i,j,k,m=0; for(i=0;s1[i]!='\0';i++) if(s1[i]= =s2[0]) { for(j=1,k=i+1;s2[j]!='\0';j++,k++) if(s1[k]!=s2[j]) break; if(s2[j]=='\0') { m=i; break;} } printf(“station is %d\n“,m); } 八、对矩阵的操作 注意:矩阵的主对角线、副对角线的概念 如何实现矩阵转置、求解矩阵中指定的元 素之和等问题(如求解右上三角、左下三角的 元素之和) 打印杨辉三角形(用一维和二维分别实现 ) 习题7.6:输出杨辉三角形(10行)。 void main() { int i,j,a[11][11]; for(i=0;i11;i++) {a[i][1]=1;a[i][i]=1;}{a[i][1]=1;a[i][i]=1;} for(ifor(i=3;i11;i++)=3;i11;i++) for(jfor(j=2;j=i-1;j++)=2;j=i-1;j++) a[i][ja[i][j]=a[i-1][j-1]+a[i-1][j];]=a[i-1][j-1]+a[i-1][j]; for(ifor(i=1;i11;i++)=1;i11;i++) { {for(jfor(j=1;j==1;j=i;ji;j++)++) printf(“%6d “, printf(“%6d “,a[i][ja[i][j]);]); printf(“\nprintf(“\n“); }“); } printf(“\n“); } 1 1 1 11 1 1 2 11 2 1 1 3 3 11 3 3 1 1 4 6 4 11 4 6 4 1 1 5 10 10 5 11 5 10 10 5 1 …… …… a[1][1]1 a[2][1]1+a[2][2]1 a[3][1]1+a[3][2]2+a[3][3]1 a[4][1]1+a[4][2]3+a[4][3]3+a[4][4]1 a[5][1]1+a[5][2]4+a[5][3]6+a[5][4]4+a[5][5 ]1 ………… a[i][ja[i][j]=a[i-1][j]+a[i-1][j-1]]=a[i-1][j]+a[i-1][j-1] 0 0行、行、0 0列不用列不用 第一列、对第一列、对 角线为角线为1 1 从第三行开始计从第三行开始计 算各元素值算各元素值 输出各元素值输出各元素值 main() { int a[10][10]; int i,j; for (i=0;i10;i++) { a[i][0]=1;a[i][i]=1; for (j=1;ji;j++) a[i][j]=a[i-1][j-1]+a[i- 1][j]; } for(i=0;i10;i++) { for(j=0;j=i;j++) printf(“%6d“,a[i][j]); printf(“\n“); } for (i=0;i10;i++) {for (j=0;j35-3*i;j++) printf(“ “); for (j=0;j=i;j++) printf(“%6d“,a[i][j]) ; printf(“\n“); } }

展开阅读全文

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
算法设计与分析》目录: 第一篇引入篇 第1章算法概述1.1用计算机求解问题与算法 1.1.1用计算机求解问题的步骤 1.1.2算法及其要素和特性 1.1.3算法设计及基本方法 1.1.4从算法到实现 1.2算法描述 1.2.1算法描述简介 1.2.2算法描述约定 1.2.3一个简单问题的求解过程 1.3现代常用算法概览* 1.3.1压缩算法 1.3.2加密算法 1.3.3人工智能算法 1.3.4并行算法 1.3.5其他实用算法 第2章算法分析基础 2.1算法分析体系及计量 2.1.1算法分析的评价体系 2.1.2算法的时间复杂性 2.1.3算法的空间复杂性 2.1.4NP完全性问题 2.2算法分析实例 2.2.1非递归算法分析 2.2.2递归算法分析 2.2.3提高算法质量 第二篇基础篇 第3章算法基本工具和优化技巧3.1循环与递归 3.1.1循环设计要点 3.1.2递归设计要点 3.1.3循环与递归的比较 3.2算法与数据结构 3.2.1原始信息与处理结果的对应存储 3.2.2数组使信息有序化 3.2.3数组记录状态信息 3.2.4大整数存储及运算 3.2.5构造趣味矩阵 3.3优化算法的基本技巧 3.3.1算术运算的妙用 3.3.2标志量的妙用 3.3.3信息数字化 3.4优化算法的数学模型 3.4.1杨辉三角形的应用 3.4.2最大公约数的应用 3.4.3公倍数的应用 3.4.4斐波那契数列的应用 3.4.5递推关系求解方程 习题 第三篇核心篇 第4章基本的算法策略4.1迭代算法 4.1.1递推法 4.1.2倒推法 4.1.3迭代法解方程 4.2蛮力法 4.2.1枚举法 4.2.2其他范例 4.3分治算法 4.3.1分治算法框架 4.3.2二分法 4.3.3二分法变异 4.3.4其他分治方法 4.4贪婪算法 4.4.1可绝对贪婪问题 4.4.2相对或近似贪婪问题 4.4.3贪婪策略算法设计框架 4.5动态规划 4.5.1认识动态规划 4.5.2动态规划算法设计框架 4.5.3突出阶段性的动态规划应用 4.5.4突出递推的动态规划应用 4.6算法策略间的比较 4.6.1不同算法策略特点小结 4.6.2算法策略间的关联 4.6.3算法策略侧重的问题类型 习题 第5章图的搜索算法 5.1图搜索概述 5.1.1图及其术语 5.1.2图搜索及其术语 5.2广度优先搜索 5.2.1算法框架 5.2.2广度优先搜索的应用 5.3深度优先搜索 5.3.1算法框架 5.3.2深度优先搜索的应用 5.4回溯法 5.4.1认识回溯法 5.4.2回溯法算法框架 5.4.3应用1——基本的回溯搜索 5.4.4应用2——排列及排列树的回溯搜索 5.4.5应用3——最优化问题的回溯搜索 5.5分支限界法 5.5.1分支搜索算法 5.5.2分支限界搜索算法 5.5.3算法框架 5.6 图的搜索算法小结 习题 第四篇应用篇 第6章算法设计实践6.1循环赛日程表 6.2求3个数的最小公倍数 6.3猴子选大王 6.4最大子段和问题 6.5背包问题 6.5.1与利润无关的背包问题 6.5.2与利润有关的背包问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值