1.将一组字符串按字典顺序输出。(通过函数调用完成)
程序源代码:
#include
#include
//进行值得交换
void swap(char c[],int length){
int i,j;
char temp;
for(i=0;i for(j=i+1;j if((c[i]-c[j])>0){ temp=c[i]; c[i]=c[j]; c[j]=temp; } } } } int main(){ char c[100]; printf("请输入一窜字符:\n"); gets(c); swap(c,strlen(c)); puts(c); return 0; } 程序的运行结果(I/O窗口截图) 第三讲排序算法(7.28)(语言提高班) 目录 训练1.明明的随机数(Noip2006普及组第1题) (1) 训练2.众数(masses.cpp) (2) 训练3.车厢重组(carry.cpp) (2) 训练4.军事机密(secret.cpp) (2) 训练5.排名 (3) 训练6.奖学金(Noip2007 普及组第1题) (3) 训练7.统计数字(Noip2007) (5) 训练8.输油管道问题 (5) 训练9.奇数单增序列 (6) 训练10.整数奇偶排序 (6) 训练11:合影效果 (7) 训练12:分数线划定 (7) 训练13:病人排队 (8) 训练14:单词排序 (9) 训练1.明明的随机数(Noip2006普及组第1题) 【问题描述】 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。 【输入文件】 输入文件random.in 有2行, 第1行为1个正整数,表示所生成的随机数的个数:N 第2行有N个用空格隔开的正整数,为所产生的随机数。 【输出文件】 输出文件random.out 也是2行,第1行为1个正整数M,表示不相同的随机数的个数。第2行为M个用空格隔开的正整数,为从小到大排好序的不相同的随机数。 【输入样例】 10 20 40 32 67 40 20 89 300 400 15 【输出样例】 8 15 20 32 40 67 89 300 400 查字典常用的三种方法是:音序查字法、部首查字法和数笔画查字法。 怎样用音序查字法查字典 1.音序查字法先要背熟汉语拼音字母表,熟练掌握音序。 2.看清要查的第一个字母是什么,在字典的《音节表》里查到这个大写字母。 3.在查到的大写字母下面找到音节,再看看它右边标的页码。 4.翻到指定的页码查到音节后,再按四声的顺序,就查到要查的字了。 (一)怎样用部首查字法查字典 字典、词典根据汉字字形结构,把它们相同的部分作为查字依据,分部排列,这相同部分叫“部首”。 【举例】 例1. 什么情况下使用部首查字法查字典? 例2. 怎样用部首查字法查字典? 【解答】 1. 在字典中,部首排在《部首检字表》中。凡是带有同一个部首的字,就按笔画多少的顺序排列在这个部首内。如“林”、“森”、“椅”、“梨”等字都在“木”部里。因此,在知道字形的情况下,就可以利用部首法查字典了。 2. 按部首查字典的步骤是: ①确定字的部首,根据部首的笔画在《部首目录》中找到这个部首及它在《检字表》中的页码; ②根据所查的部首所在的页码,在《检字表》中找到这个部首,除去部首外,数清这个字余下部分的笔画,就在部首下找到相应的笔画栏,找到要查的字及它的页码; ③按页码在字典中就可以找到要查的字了。 现在以《新华字典》为例查“垠”字。 “垠”的部首是“土”,三画,先在《部首目录》的三画中找到“土部”,它右面的页码是“26”,然后在检字表的26页中找到“土部”这一栏。“垠”字除去部首后是六画,在六画中找到“垠”和它的页码 536,于是在536页中就可以找到这个字了。 (二)怎样确定汉字的部首 按部首查字典的关键是确定字的部首。怎样确定部首呢?请看下面例题,找找规律。 【举例】 例 1. 下面的字都是形声字,它们以哪部分为部首呢? 柳愧跳聋 例2. 下面的字像是有两个部首,究竟先查哪个呢? 休早闷坐 例3. 下面是不好确定部首的字,应怎样确定部首? 才上长 例4. 下面的字怎样确定部首? 见酉麻 【解答】 本文由我司收集整编,推荐下载,如有疑问,请与我司联系实现全排列的两种算法:字典序列法以及递归算法(java)2014/10/19 0 一.全排列之字典序列法 /** * 这是一个实现全排列的字典序列算法,可适用于有数据重复以及无数据重复 的字符串----注意:字符要先从小到大排序* 算法描述:例如:645321 的下一个数: * 1.左边的数要大于右边:从最右- 最左,遍历查询是否有邻近左边的数小于右边的 数,有就停止遍历,本例:4 5. * 2.把找到的左边那个数,与其右边的所有数比较,从 右向左逐一比较,找到第一个比它大的,然后交换。本例:比4 大的右边第一个数 是5. * 3.将两个数对换,则字符可分为65,4321,把4321 从小到大排序:1234* 4. 下一个字符序列是:651234. span > * * @param ary //要排列的数组*/public static void dictorySerial(int[] ary1) {Arrays.sort(ary1);System.out.println( 1: + Arrays.toString(ary1));int i = 2;while (true) {int j;for (j = ary1.length - 1; j j--) {if (ary1[j - 1] ary1[j]) {for (int k = ary1.length - 1; k j - 1; k--) {if (ary1[k] ary1[j - 1]) {int temp = ary1[j - 1];ary1[j - 1] = ary1[k];ary1[k] = temp;break;}}int[] ary2 = new int[ary1.length - j];System.arraycopy(ary1, j, ary2, 0, ary2.length);Arrays.sort(ary2);System.arraycopy(ary2, 0, ary1, j, ary2.length);System.out.println((i++) + : + Arrays.toString(ary1));break;}}if (j == 0) {break;}}}二.全排列之递归算法 /** * 这是关于java 全排列的递归算法,本算法不适用于字符串中有重复数字。- --注意:交换两个数后,后面要在交换过来,不要影响要排列的字符序列(*)* 算法过程:如:123 的全排列:* 1.可以看成:以1 开头的全排列,以2 开头的全 排列,以3 开头的全排列/span 表示成1(23),2(13),3(12)的全排列,即23 全排列,13 全排列,12 全排列. span > span > span > span > span > span > span > span > span > span > span > span > span >public static void recurrence(int[] ary2, int start, int end) {if (start == end) {System.out.println((++i) + : + Arrays.toString(ary2));} else {for (int i = start; i = end; i++) {swap(ary2, start, i);recurrence(ary2, start + 1, end);swap(ary2, start, i);System.out.println(Arrays.toString(ary2));}}}public static void swap(int[] ary2, int start, 查字典专项练习 姓名: 一、用部首查字法查下面的字,并按要求填表。 二、填空。 1、“沉”用音序查字法,应先查大写字母___,再查音节____;用部首查字法先查部首____,再查____画。 2、“熟” 用音序查字法,应先查大写字母___,再查音节____;用部首查字法先查部首____,再查____画。 3、“逸”用音序查字法,应先查大写字母___,再查音节____;用部首查字法先查部首____,再查____画。 4、“禽”用音序查字法,应先查大写字母___,再查音节____;用部首查字法先查部首____,再查____画。 5、当不知道一个字的读音,也分不清它的部首的时候,可以用______方法查。如用这种方法查字,“考”字该查___画。“夷” 字该查___画。“卑”字该查_____画。 三、我会写例:b ( B ) o ( O ) p ( ) y ( ) w ( ) q ( ) x ( ) r ( ) k ( ) j ( ) h ( ) m( ) f ( ) d ( ) 四、我会选择下面词语中带点的字的正确解释,用序号写在括号里。32%(14分) 1、异:a 有分别,不相同;b 奇异,特别;c 惊奇,奇怪;d 另外,别的;e分开 奇花异草()异口同声()诧异()异乡() 2、尽:a 达到极端;b全部用出;c用力完成;d 全,所有的; e 完。 竭尽全力()山穷水尽()无穷无尽()尽量帮助() 3、望:a向远处看;b探望;c盼望,希望;d名望;e对着,朝着。一望无际()喜出望外()德高望重()看望病人() 四、选择题 1、下列每组三个汉字,查字典是音序相同的一组是(); 部首相同的一组是()。 A建延造B欲软欣C缠动紧 D茁初雏E祼浏聊F湃臂编 2、用数笔画、音序和部首查字典,完全没有错误的一组是()A承(9C乙)觅(8M爪)丧(8S十) B峦(9 L山)凯(8K几)展(10Z尸) 第2次课枚举法中的字典排列 小热身 体会一下,“分给两个人”和“分成两堆”有什么区别呢? (1)把5个苹果全部分给两个人,共有多少种不同的分法? (2)把5个苹果分成两堆,共有多少种不同的分法? 例题1:卡莉娅、墨莫、小高三个人去游乐园玩,三人在藏宝屋中一共发现了4件宝物,三人找到的宝物数量共有多少种不同的可能?(可能有人没有发现宝物) 练习1:老师准备了6个笔记本奖励萱萱、小高、墨莫三人,每人至少得到1本笔记本,请问:老师有多少种不同的奖励方法? 例题2:老师要求每个同学写出3个自然数,并且要求这3个数的和是8。如果两个同学写出的3个自然数相同,只是顺序不一样,则算是同一种写法。试问:同学们最多能得出多少种不同的写法? 练习2:三个大于0的整数之和(数与数可以相同)等于10,共有多少组这样的三个数? 例题3:如下图所示,有7个按键,上面分别写着1、2、3、4、5、6、7这七个数字。请问: (1)从中选出2个按键,使它们上面的数字的差等于2,一共有多少种选法? (2)从中选出2个按键,使它们上面的数字的和大于9,一共有多少种选法? 练习3:有一次,著名的探险家大米得到一个宝箱,但是宝箱有密码锁,密码锁下面有一行小字,密码是和大于11的两个数,而且这两个数不能相同,不用考虑数的先后顺序,你知道密码共有多少种可能吗? 例题4:如图,数一数图中包含星星的长方形(包括正方形)有多少个? 练习4:如图,数一数图中包含星星的正方形有多少个? 作业: 1、有4支完全相同的铅笔要分给3位同学,每位同学至少分1支,共有多少种不同的分法? 2、有面值分别为1元、10元和50元的纸币若干,每种面值的纸币张数都大于 3、如果从中任意取3张,那么能组成的钱数共有多少种? 3、从1、2、3、 4、 5、6这六个数字中选出2个数字,使它们的数字的差等于2,一共有多少种选法? 4、数一数,下图包含星星的长方形(包括正方形)有多少个? 5、在下图中,一共能找出多少个含“☆”的三角形。 C语言学习2之字符串及输入输出 语言学习 字符串及输出和输入 :不像我们之前学到的整型,浮点型等数据那样,没有为字符串定义专门的变量类型,一般情况下将字符串放在字符数组中。下 “ * <> <> " "宏定义一个字符串 () { (" () \"()); (" () \"()); } 程序 程序运行的结果如图所示: 图:程序运行结果 () \” * 函数名: 输入参数:无 输出参数:无 调用:() 被调用:无 功能:求取字符串中字符的个数 * <> <> \"(""))。而()只是一个关键字,它是用来求某一数据类型所占的字节数的;.我们可以通过宏定义的方式来定义一段字符串。其实我们还可以有另一个方法来定义一个字符串变量: [] " ." 下面我们来具体比较下()和的区别,看程序: * 函数名: 输入参数:无 输出参数:无 调用:(), () 被调用:无 程序运行的结果如图所示: 图:程序运行结果 从程序运行的结果我们可以看出()求的是数组的大小,因为我们定义的是包含个字符元素的数组,而一个字符的大小为个字节,所以该数组的大小为;()求的是该数组中字符串所包含的字符的个数(包括空格),所以其大小为. 标志 五种标志的具体具体作用如表所示: 标志意义 项目左对齐。也就是说将项目打印在 字段的左侧开始处。 有符号的数若为正则在数字前加 “”,若为负则加“” 空格有符号数若为正则在数字前加一 个空格,若为负则在数字前加 “” 和会打印出八进制和十六进制的 的前缀。对于浮点型数据,即使 没有数字,也会打印一个小数点 用前导代替空格来填充字段宽 度。如果标志与精度说明符同时 出现那么标志被忽略 表:()种标志 :用反斜杠和回车的方式。例如: (“ \ .\”) .采样字符串连接的方法。例如: 算法分析与设计实验报告 第 2 次实验 这次的实验和上一次的字典序问题有一些相似,主要不同的地方在于要写出下 附录:完整代码 #include 第三讲 排序算法(7.28语言提高班)
常用的三种查字典方法
【IT专家】实现全排列的两种算法:字典序列法以及递归算法(java)
查字典专项练习
2枚举法中的字典排列
C语言学习2之字符串及输入输出
排列的字典序问题