下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C 程序设计经典程序举例1 、判断素数(循环、利用算法减少运算次数)例:1159:质因数分解正整数 n 是两个不同质数的乘积,试求出其中较大的。#include<stdio.h>#include<math.h>int main()long long n,big;int small;int root,i,j;scanf("%lld",&n);for(small=2;small<=(int)sqrt(n);)/ 素数判断过程,从最小素数开始root=(int)sqrt(small);for(i=2;i<=root+1;i+)if(sm
2、all%i=0)break;if(i<=root)if(small=2)small+;else small+=2;/ 只判断 2 和奇数,减少运算次数 continue;if(n%small=0)big=n/small;root=(int)sqrt(big);for(i=2;i<=root+1;i+)if(big%i=0)break;if(i<=root)if(small=2)small+;else small+=2;continue; elsebreak;/ 得到最大质因数,跳出循环printf("%d %lld",small,big);return 0
3、;2、递归与回溯算法(解决尝试性问题,每一级都对下一级有影响)例: 1085: 0/1 迷宫问题给定一个由0(表示墙壁)和1 (表示道路)的迷宫,请你判断进入迷宫后,仅通过横向和纵向的行走是否能从迷宫中走出来,即能否从坐标(1, 1 )走到(n, m)。#include<stdio.h>#include<stdlib.h>int starti,startj;int endi,endj;/ 定义迷宫起止点int success=0;/ 用于判断是否成功通路int main()int visit(int i,int j,int maze10);int i,j;int n,m
4、;int maze1010;scanf("%d %d",&n,&m);for(i=1;i<=n;i+)for(j=1;j<=m;j+)scanf("%d",&mazeij);starti=1,startj=1,endi=n,endj=m;if(visit(starti,startj,maze)=0)printf("NO"); else printf("YES");return 0;int visit(int i,int j,int maze10)mazeij=-1;/ 安全性判断
5、已经经过的路if(i=endi&&j=endj)success=1;/ 成功到达终点/ 进行 四个方向的尝试if(success!=1&&mazeij+1=1)visit(i,j+1,maze);if(success!=1&&mazei+1j=1)visit(i+1,j,maze);if(success!=1&&mazei-1j=1)visit(i-1,j,maze);if(success!=1&&mazeij-1=1)visit(i,j-1,maze);mazeij=0;/ 尝试失败返回0,尝试成功返回1retu
6、rn success;例:全排列问题输入一个正整数n,按字典序打印其全排列#include<stdio.h> int used16=0;/ 是否使用判断int result16=0;/ 打印结果void proc(int step,int n)/ 按步进行数组赋值int i;if(step>n)for(i=1;i<=n;i+)printf("%d ",resulti);printf("n");elsefor(i=1;i<=n;i+)if(usedi=0)resultstep=i;usedi=1;proc(step+1,n);
7、usedi=0;/ 回溯int main()int n;scanf("%d",&n);proc(1,n);return 0;例:二分查找#include <stdio.h> int bisearch( int ary, int left, int right, int num ) printf("search %d from %d to %dn", num, left, right ); int mid;/ 设置二分点进行比较if(left>right)return -1;/ 未找到需查找的点mid=(left+right)/2
8、;if(arymid=num)return mid;else/ 与二分点进行大小比较后进入递归if(arymid>num)bisearch(ary, left, mid-1, num);elseif(arymid<num)bisearch(ary, mid+1,right,num);int main() int n, array10000, i, num;scanf("%d", &n);scanf("%d", &num); for (i=0;i<n; i + ) scanf("%d",&arr
9、ayi);/ 数组需有序,若无序数组先进行排序printf( "%d",bisearch(array,0,n-1,num);return 0;3、排序问题冒泡排序快排函数4、字符串处理例:判断回文#include<stdio.h>#include<string.h>#include<stdlib.h>int main()char *s=(char*)malloc(sizeof(char)*256);char change256="0"gets(s);int len=strlen(s);int i;for(i=0;i&l
10、t;len;i+)changelen-1-i=*(s+i);if(strcmp(change,s)=0)printf(" 是 ");elseprintf(" 否 ");return 0;例:将原字符串中的字符串1 替换为字符串2,替换后新出现的字符串不包括在内,仅保留子函数。char* replace(char *stence,char pstr1,char pstr2)if(strcmp(stence,pstr1)=0)return pstr2;/ 如果原字符串与字符串1 相同直接替换elseif(strstr(stence,pstr1)=NULL)r
11、eturn stence;/ 找不到字符串1elsechar *find=stence;char final400="0" ;while(strlen(find)>strlen(pstr1)&&find!=NULL)/ 循环在剩余字符串中能寻找到字符串1 时继续进行char change400="0"char *use=find;find=strstr(find,pstr1);/ 寻找字符串1for(int i=0;i<(find-use);i+)changei=*(use+i);find=find+strlen(pstr1);/ 直接跳过字符串1strcat(final,change);/ 将出现字符串1 之前的部分粘到最终字符
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 爱情音乐教学课件
- 2026年安全员考试题库(附答案)
- 安全隐患素材
- 移动通信第一二章作业-配合哈工大移动通信课程
- 安全与法治班会
- 江苏扬州市高邮市2025-2026学年高一第二学期期中检测数学试卷
- 重庆市复旦中学教共体2025-2026学年高一下学期期中考试数学试卷(教师版)
- 2026年安徽省九年级政治第7课备考习题集
- 安全用电教案
- 高三物理 弹力与摩擦力专题复习教学设计
- 甘肃张掖市肃南裕固族自治县马蹄学校2026-2027学年度第一学期七年级英语课后综合作业(一)(含答案)
- 2026年发展对象培训结业测试及答案解析
- 2026道路运输行业安全隐患排查对标手册
- 2026年第一季度家庭医生签约服务培训试卷及答案
- 2026“弘扬长征精神 奋进新征程”知识竞赛题库(含答案解析)
- 2026-2027学年教科版四年级上册科学第一单元《空气》单元素养测评卷含答案
- GB/T 47962-2026移相变压器的应用、规范和试验导则
- 五级护工考试试题及答案
- 《电动自行车车载北斗卫星定位模块》(征求意见稿编制说明)
- (正式版)DB61∕T 1090-2017 《相变自调温沥青路面材料设计与施工规范》
- 肺炎合并呼吸衰竭护理查房
评论
0/150
提交评论