- 博客(18)
- 收藏
- 关注
原创 《算法竞赛入门经典(第2版)》习题3-10 盒子 (Box, ACM/ICPC NEERC 2004, UVa1587)
《算法竞赛入门经典(第2版)》习题3-10 盒子 (Box, ACM/ICPC NEERC 2004, UVa1587)给定6个矩形的长和宽wi和hi(1<=wi,hi<=10000),判断它们能否构成长方体的6个面。【输入】包含若干个测试样例,每个样例包含6行,每行包括两个整数w和h,表示长方形的宽和高。(1<=w,h<=10000)【输出】对每一个样例,输出‘POSSIBLE’表示能够构成长方体,输出‘IMPOSSIBLE’表示不可以。样例输入1345 25842
2020-07-05 00:54:54 493
原创 《算法竞赛入门经典(第2版)》习题3-9 子序列 (All in All, UVa 10340)
《算法竞赛入门经典(第2版)》习题3-9 子序列 (All in All, UVa 10340)输入两个字符串s和t,判断是否可以从t中删除0个或多个字符(其他顺序不变),得到字符串s。例如,abcde可以得到bce,但无法得到dc。输入:有若干行,每行包含两个字符串s和t,中间用空格分开,全部输入以EOF结束。输出:Yes或No,表示是否可以由t得到s。样例输入sequence subsequenceperson compressionVERDI vivaVittorioEmanuel
2020-07-04 23:03:49 221
原创 《算法竞赛入门经典(第2版)》 习题3-7 DNA序列(DNA Consensus String, ACM/ICPC Seoul 2006, UVa1368)
《算法竞赛入门经典(第2版)》 习题3-7 DNA序列(DNA Consensus String, ACM/ICPC Seoul 2006, UVa1368)输入m个长度均为n的DNA序列,求一个DNA序列,到所有序列的总hamming距离尽量小。两个等长字符串的hamming距离等于字符不同的位置个数,例如,ACGT和GCGA的hamming距离为2(左数第1、4个字符不同)。输入整数m和n(4<=m<=50,4<=n<=1000),以及m个长度为n的DNA序列(只包含字母A
2020-07-03 09:02:45 453
原创 《算法竞赛入门经典(第2版)》 习题3-6 纵横字谜的答案(Crossword Answers, ACM/ICPC World Finals 1994, UVa232)
《算法竞赛入门经典(第2版)》 习题3-6 纵横字谜的答案(Crossword Answers, ACM/ICPC World Finals 1994, UVa232)输入一个r行c列(1<=r,c<=10)的网格,黑格用“*”表示,每个白格都填有一个字母。如果一个白格的左边相邻位置或者上边相邻位置没有白格(可能是黑格,也可能出了网格边界),则称这个白格是一个起始格。首先把所有起始格按照从上到下、从左到右的顺序编号为1,2,3,…,如图3-7所示。接下来要找出所有横向单词(Across)。这些
2020-07-02 18:00:00 392
原创 《算法竞赛入门经典(第2版)》 习题3-5 谜题 (Puzzle, ACM/ICPC World Finals 1993, UVa227)
《算法竞赛入门经典(第2版)》 习题3-5 谜题 (Puzzle, ACM/ICPC World Finals 1993, UVa227)有一个5*5的网格,其中恰好有一个格子是空的,其他格子各有一个字母。一共有4种指令:A,B,L,R,分别表示把空格上、下、左、右的相邻字母移到空格中。输入初始网格和指令序列(以数字0结束),例如ARRBBL0,输出指令执行完毕后的网格。如果有非法指令,应输出“This puzzle has no final configuration.”。分析此题是典型的模拟题(即
2020-07-01 15:19:01 340
原创 《算法竞赛入门经典(第2版)》 习题3-4 周期串(Periodic Strings, UVa455)
《算法竞赛入门经典(第2版)》 习题3-4 周期串(Periodic Strings, UVa455)周期串 如果一个字符可以由某个长度为k的字符串重复多次得到,则称该串以k为周期。例如,abcabcabcabc以3为周期,注意,它也以6和12为周期输入一个长度不超过80的字符串,输出其最小周期。分析从字符串s[0]开始,逐个检测每一个开头为s[0]、结尾为s[i]的串,如果其中一个串是周期,程序结束,输出这个最小周期即可。代码#include <stdio.h>#include &
2020-07-01 12:09:43 287
原创 《算法竞赛入门经典(第2版)》习题3-1 得分 (Score, ACM/ICPC Seoul 2005, UVa1585)
习题3-1 得分 (Score, ACM/ICPC Seoul 2005, UVa1585)给出一个由O和X组成的串(长度为1-80),统计得分。每个O的得分为目前连续出现的O的个数,X的得分为0。例如:OOXXOXXOOO的得分为1+2+0+0+1+0+0+1+2+3。分析设置两个累加值n和sum,分别用于累计当前的字母’O’应得的分数,以及累计总分。遍历串的每一个字符,若等于’O’,则分别累加n和sum,若不为’O’(即X),则将n置0即可。代码:#include <stdio.h&g
2020-06-30 23:19:42 451
原创 《算法竞赛入门经典(第2版)》例题3-6 UVa1584 环状序列
UVa1584 环状序列《算法竞赛入门经典(第2版)》52页,例题3-6 环状序列(Circular Sequence ACM/ICPC Seoul 2004, UVa1584)长度为n的环状串有n种表示法,分别为从某个位置开始顺时针得到。在这些表示法中,字典序最小的称为“最小表示”。输入一个长度为n(1<=n<=100)的环状DNA串(只包含A、C、G、T这4种字符)的一种表示法,你的任务是输出该环状串的最小表示。例如,CTCC的最小表示是CCCT,CGAGTCAGCT的最小表示为AGC
2020-06-30 14:01:18 185
原创 UVa1583 最小生成元 只需枚举几十次的算法
UVa1583 最小生成元在刘汝佳老师的《算法竞赛入门经典(第2版)》52页例题3-5中看到此题,发现此题并不需要枚举太多,实际上只需要枚举很少的值即可。原题内容如下例题 3-5 生成元 (Digit Generator, ACM/ICPC Seoul 2005, UVa1583)如果x加上x的各个数字之和得到y,就说x是y的生成元。给出n(1<=n<=100000),求最小生成元。无解输出0。例如,n=216,121,2005时的解分别为198,0,1979。分析由于每个数位的数
2020-06-29 18:57:23 200
原创 《C程序设计语言》学习笔记——练习3-3
在写程序之前感觉很多细节没想清楚,写出来之后就发现有些是不需要考虑太多,应该先把主体写出来,把一些细致的地方放到下一步的调试中去。/* 练习3-3编写函数expand(s1,s2),将字符串s1中诸如a-z一类的速记符号在字符串s2中扩展成等价的完整列表abc......xyz。允许处理大小写字母和数字,并可以处理诸如a-b-c与a-z0-9与-a-z等情况。正确安排好前导与尾随的-。
2015-10-26 11:05:04 446
原创 《C程序设计语言》学习笔记——练习3-2
/* 练习3-2 (只写了\n和\t)编写函数escape(s,t),将字符串t拷贝到字符串s中,并在拷贝过程中将诸如换行符与制表符等等字符转换成诸如\n与\t等换码序列。使用switch语句。再编写一个具有相反功能的函数,在拷贝过程中将换码序列转换成实际字符。*/#include void escape(char *s, char *t){ int i, j; for (i
2015-10-22 11:41:43 1032
原创 《C程序设计语言》学习笔记——练习4-1
#include 2 #define MAX 100 3 /* 练习4-1 编写一个函数strindex(s,t),用于返回字符串t在s 4 中最右出现的位置,如果s中不包含t,那么返回-1。 */ 5 6 int strindex(char source[], char searchfor[]); 7 8 main() 9 { 10
2015-09-29 12:28:22 350
原创 《C程序设计语言》学习笔记——练习3-1
计时的结果,都是0.000000....../*练习3-1 在上面有关二分查找的例子中,在while循环语句内共作了两次测试,其实只要一次就够了(以把更多的测试放在外面为代价)。重写这个函数,使得在循环内部只进行一次测试,并比较两者运行时间的区别。*/#include #include #include int binsearch(int x, int v[], int n)
2015-08-08 20:48:45 1051
原创 《C程序设计语言》学习笔记——练习2-5
这个问题令我困惑的就是“任一字符”,难道还要随便挑一个么?为了简单,我只是遇到第一个符合条件的就返回了。/*练习2-5 编写函数any(s1,s2),它把字符串s2中任一字符在字符串s1中的第一次出现的位置作为结果返回。如果s1中没有包含s2中的字符,那么返回-1。(标准库函数strpbrk具有同样的功能,但它返回的是指向该位置的指针。)*/#include #define MAX
2015-07-20 11:46:28 527
原创 《C程序设计语言》学习笔记——练习2-4
原来的squeeze函数很巧妙,基本上照着抄就可以了。但是要在处理每一个s2中的字符之后,修改s1中'\0'的位置。/*练习2-4 重写squeeze(s1,s2)函数,把字符串s1与字符串s2中字符匹配的各个字符都删除掉。*/#include #define MAX 50void squeeze(char s1[], char s2[]){ int i, j, index;
2015-07-20 11:17:20 556
原创 《C程序设计语言》学习笔记——练习2-3
开始的时候没有把处理的流程搞清晰,以为这会很容易,结果程序出现了一些混乱和错误。后来先把处理的流程搞清楚,就变得很明白了。/*练习2-3 编写函数htoi(s),把由十六进制数字组成的字符串(前面可能包含0x或0X)转换成等价的整数值。字符串中允许的数字为:0~9,a~f,以及A~F。*/#include #define MAX 20int htoi(char s[]){ i
2015-07-18 09:10:48 496
原创 《C程序设计语言》学习笔记——练习2-1
从标准头文件中直接输出确实比较容易,只是百度的时间了。要是自己计算确实比较困难。为了看得比较清楚,把sizeof也加上了。/*编写一个程序来确定signed及unsigned的char、short、int与long变量的取值范围,可以通过打印标准头文件中的相应值来完成,也可以直接计算来做。后一种方法较困难一些,因为要确定各种浮点类型的取值范围*/#include #include
2015-07-14 15:06:18 919
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人