![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
《算法竞赛入门经典 第2版》刘汝佳习题解答
文章平均质量分 70
weixin_27848283
这个作者很懒,什么都没留下…
展开
-
习题1-5 打折
一件衣服95元,若消费300元,可打八五折。输入购买衣服件数,输出需要支付的金额(单位:元),保留两位小数。#include <stdio.h> int main() { int n; scanf("%d",&n); if((n*95)>300) { printf("%0.2lf",n*95*0.85); } else { ...原创 2018-07-08 01:05:14 · 901 阅读 · 0 评论 -
例题3-7 回文词
例题3-7 回文词输入一个字符串,判断它是否为回文串及镜像串。输入字符串保证包含数字0,所谓回文串,就是反转以后和原串相同,如abba和madam,所有的镜像串,就是左右镜像之后和原串相同,如2S和3AIAE,并不是每个字符在镜像之后都能得到一个合法的字符。本题中,每个字符的镜像如下表所示Character Reverse Character Reverse Ch...原创 2018-07-24 11:38:44 · 156 阅读 · 0 评论 -
例题1-1 圆柱体的表面积
输入底面半径r和高h,输出圆柱体的表面积,保留3位小数,格式详见:样例输入:3.5 9样例输出:Area = 274.889程序如下#include <stdio.h> #include <math.h> int main(){ //printf("%.1f",8.0/5); //printf("%.8f\n",1+2*sqrt(3)/(5-0.1)); con...原创 2018-07-08 00:32:14 · 672 阅读 · 0 评论 -
例题1-2 三位数的反转
输入一个三位数,分离出它的百位、十位和个位,反转后输出。样例输入:124样例输出:421不考虑百位是0的情况直接输出:#include <stdio.h>int main(){ int n; scanf("%d",&n); printf("%d%d%d",n%10,n/10%10,n%100);}若百位是0,不显示出来#include <stdio.h&...原创 2018-07-08 00:38:53 · 254 阅读 · 0 评论 -
例题1-4 鸡兔同笼
已知鸡和兔的总数量为n,总腿数为m。输入n和m,依次输出鸡的数目和兔的数目。如果无解,则输出No answer。样例输入:14 32样例输出:12 2样例输入:10 16样例输出:No answer#include <stdio.h>int main(){ int n,m,a,b; scanf("%d%d",&n,&m); a=(4*n-m)/2; b=n-...原创 2018-07-08 00:48:17 · 667 阅读 · 0 评论 -
例题1-5 三整数排序
输入3个整数,从小到大排序后输出样例输入:20 7 33样例输出:7 20 33#include <stdio.h>int main(){ int a,b,c,t; scanf("%d%d%d",&a,&b,&c); if(a>b) { t=a; a=b; b=t; } if(a>c) { t=a; ...原创 2018-07-08 00:52:02 · 183 阅读 · 0 评论 -
习题1-1 平均数
输入3个整数,输出它们的平均值,保留3位小数#include <stdio.h> int main() { int a,b,c; scanf("%d%d%d",&a,&b,&c); printf("%0.3lf",(a+b+c)/3.0); }原创 2018-07-08 00:53:49 · 326 阅读 · 0 评论 -
习题1-2 温度
输入华氏温度f,输出对应的摄氏温度c,保留3位小数。提示:c=5(f-32)/9。#include <stdio.h> int main() { double f,c; scanf("%lf",&f); c=5*(f-32)/9; printf("%0.3lf",c); } ...原创 2018-07-08 00:58:48 · 307 阅读 · 0 评论 -
习题1-3 连续和
输入正整数n,输出1+2+3+......+n的值。提示:目标是解决问题,而不是编程练习。#include <stdio.h> int main() { int a,sum=0,i; scanf("%d",&a); for(i=1;i<=a;i++) { sum=sum+i; } printf("%d",sum); ...原创 2018-07-08 01:01:01 · 298 阅读 · 0 评论 -
习题1-4 正弦和余弦
输入正整数n(n<360),输出n度的正弦,余弦函数值。提示:使用数学函数。#include <stdio.h> #include <math.h> int main() { int n; scanf("%d",&n); printf("%0.2lf %0.2lf",sin(n),cos(n)); }...原创 2018-07-08 01:03:25 · 1301 阅读 · 0 评论 -
例题3-4 竖式问题
竖式问题找出所有形如abc*de(三位数乘以两位数)的算式,使得在完整的竖式中,所有数字都属于一个特定的数字集合。输入数字集合(相邻数字之间没有空格),输出所有竖式。每个竖式前应有编号,之后应有一个空行。最后输出解的总数。具体格式详见样例输出(为了便于观察,竖式中的空格改用小数点显示,但所写程序中应该输出空格,而非小数点)。样例输入:2357样例输出:<1>..775X..33----...原创 2018-07-14 23:30:27 · 1105 阅读 · 0 评论 -
例题3-5 Tex中的引号
在TeX中,左双引号是“''” ,右双引号是“''”。输入一篇包含双引号的文章,你的任务是把它转换成TeX的格式样例输入:"To be or not to be," quoth the Bard, "that is the question".样例输出:''To be or not to be,'' quoth the Bard, ''that is the question''.#include...原创 2018-07-14 23:32:01 · 217 阅读 · 0 评论 -
例题3-6 WERTYU
把手放在键盘上时,稍不注意就会往右错一位。这样,输入Q会变成输入W,输入J会变成输入K等。输入一个错位后敲出的字符串(所有字母均大写),输出打字员本来想打出的句子。输入保证合法,即一定是错位之后的字符串。例如输入中不会出现大写字母A。样例输入:O S, GOMR YPFSU/样例输出:I AM FINE TODAY.#include <stdio.h>#include <str...原创 2018-07-14 23:33:04 · 271 阅读 · 0 评论 -
例题3_9 生成元
如果x加上x的各个数字之和得到y,就说x是y的生成元。给出n(1<=n<=100000),求最小生成元。无解输出0.例如n=216,121,2005时解分别为198,0,1979.#include <stdio.h>#include <string.h>#define maxn 100005int a[maxn];int main(){ in...原创 2018-08-22 23:22:38 · 388 阅读 · 0 评论 -
例题3_10 环状序列
长度为n的环状串有n中表示方法,分别为从某个位置开始顺时针得到。例如3_4的环状串有10种表示:CGAGTCAGCT,GAGTCAGCTC,AGTCAGCTCG等。在这些表示法中,字典序最小的称为”最小表示“。输入一个长度为n(n<=100)的环状DNA串(只包含A,C,G,T这个4种字符),你的任务是输出该环状串的最小表示。例如CTCC的最小表示是CCCT,CGAGTCAGCT的最小表示为...原创 2018-08-22 23:24:07 · 209 阅读 · 0 评论 -
习题3_2 分子量(ACM/ICPC2007 UVa1586)
给出一种物质的分子式(不带括号),求分子量。本题中的分子式只包含4中原子,分别为C,H,O,N,原子量分别为12.01,1.008,16.00,14.01(单位:g/mol)。例如,C6H5OH的分子量为94.108g/mol,该物质的分子量计算过程为94.108=12.01\*6+1.008\*6+16.00\*1+14.01\*0。#include <stdio.h>#i...原创 2018-11-29 18:48:47 · 214 阅读 · 0 评论 -
习题3_1 得分
习题3_1 得分给出一个由O和X组成的串(长度为1~80),统计得分。每个O的得分为目前连续出现的O的个数,X的得分为0.例如:OOXXOXXOOO的得分为1+2+0+0+1+0+0+1+2+3. #include <stdio.h>#include <string.h>#define maxn 85int main(){ char ox[ma...原创 2018-11-29 19:37:42 · 413 阅读 · 0 评论 -
例题3-3 蛇形填数
在nxn的方阵里填入1,2,3,4....nxn,要求填成蛇形。例如,n=4时方阵为:10 11 12 19 16 13 28 15 14 37 6 5 4上面的方格中,多余的空格只是为了便于观察规律,不必严格输出。n<=8。#include <stdio.h>#include <string.h>#define maxn 10int a[maxn][...原创 2018-07-11 21:13:27 · 404 阅读 · 0 评论 -
例题 3-2 开灯问题
有n盏路灯,编号为1~n。第1个人把所有的路灯都打开,第2人按下所有编号为2的倍数的开关(这些灯将被关掉),第3个人按下所有编号为3的倍数的开关(其中关掉的被打开,打开的被关掉),依此类推。一共有k个人,问最后有哪些灯开着?。输入n,k,输出开着的灯的编号。k<=n<=1000。 样例输入: 7 3 样例输出: 1 5 6 7 #include <stdio.h>#de...原创 2018-07-11 21:13:17 · 542 阅读 · 0 评论 -
习题 1-6 三角形
输入三角形3条边的长度值(均为正整数),判断是否能够为直角三角形的3个边长,如果可以,则输出yes,如果不能,则输出no。如果无法构成三角形,则输出not a triangle。#include <stdio.h> int main() { int a,b,c,t; scanf("%d%d%d",&a,&b,&c); if(a>b) ...原创 2018-07-10 00:04:23 · 771 阅读 · 0 评论 -
习题1-7 年份(判断闰年)
输入年份,判断是否为闰年。如果是则输出yes,否则输出no。原创 2018-07-10 00:12:03 · 2102 阅读 · 0 评论 -
例题 2-1 输出1,2,3,4,5,。。。。n
问题:输入正整数n,打印1,2,3,4,.....n,每个占一行。#include <stdio.h>int main(){ int n; scanf("%d",&n); for(int i=1;i<=n;i++) { printf("%d\n",i); } return 0;} ...原创 2018-07-10 00:16:07 · 609 阅读 · 0 评论 -
例题2-2 aabb(7744)
输出所有形如aabb的4位完全平方数(即前两位数相等,后两位数也相等)方法一: 思路先确定ab再判断#include <stdio.h>//floor(x+0.5) 四舍五入 #include <math.h>int main(){ int a,b,sum,m; for(a=1;a<=9;a++) { for(b=0;b<=9;b++)...原创 2018-07-10 00:24:46 · 260 阅读 · 0 评论 -
例题2-2 3n+1(角谷猜想)
猜想:对于任意大于1的自然数n,若n为奇数,则将n变为3n+1,否则变为n的一半。经过若干次这样的变换,一定会使n变为1。例如:3》10》5》16》8》4》2》1。输入n,输出变换的次数样例输入:3样例输出:7#include<stdio.h>main(){ int n,count=0; long long x; //longlong -2^63~2^63-1 scanf("...原创 2018-07-10 00:30:07 · 619 阅读 · 0 评论 -
例题2-3 近似计算
计算π/4=1-1/3+1/5-1/7+.....,直到最后一项小于10^-6。//近似计算问题do~while #include<stdio.h>main(){ int i=0; double sum=0; do { if(i%2==0) { sum=sum+1.0/(i*2+1); } else { ...原创 2018-07-10 00:34:42 · 330 阅读 · 0 评论 -
例题2-4 阶乘之和
输入n,计算S=1!+2!+3!+.....n!的末6位(不含前导0)。n<=10^-6,n!表示前n个正整数之积。样例输入:10样例输出:37913//阶乘之和 <不考虑数据范围>#include<stdio.h>main(){ int i,j,sum=0,n,sub; scanf("%d",&n); for(i=1;i<=n;i++...原创 2018-07-10 00:40:57 · 620 阅读 · 0 评论 -
例题2-5 单组数据统计
输入一些整数,求出它们的最小值,最大值和平均值(保留3为小数)。输入保证着些数都是不超过1000的整数。样例输入:2 8 3 5 1 7 3 6样例输出:1 8 4.375//数据统计单组数据(有bug未考虑最大值和最小值的初始值)#include <stdio.h>main() { int x,max=0,min=0,s,i=0; while(scanf("%d",&...原创 2018-07-10 00:50:26 · 448 阅读 · 0 评论 -
例题2-6 数据统计II(多组数据的统计)
输入一些整数,求出它们的最小值,最大值和平均值(保留3为小数)。输入保证着些数都是不超过1000的整数。输入包含多组数据,每组数据第一行是一个数n,第二行是n个整数。n=0为输入结束标记,程序应当忽略这组数据。相邻两组数据之间应输出一个空行。样例输入:82 8 3 5 1 7 3 64-4 6 10 00样例输出:case 1:1 8 4.375case 2:-4 10 3.000//数据统计(...原创 2018-07-10 01:00:34 · 1171 阅读 · 0 评论 -
习题 2-1 水仙花数(daffodil)
输出100~999中的所有水仙花数,若3位数ABC满足ABC=A^3+B^3+C^3,则称其为水仙花数。例如153=1^3+5^3+3^3,所以153是水仙花数。#include<stdio.h>int main(){ int i=1,j=0,k=0,su,sum; for(i=1;i<10;i++) { for(j=0;j<10;j++) { fo...原创 2018-07-10 01:07:56 · 662 阅读 · 0 评论 -
习题2-3 倒三角形
输入正整数n<=20,输出一个n层的倒三角形,例如n=5时输出如下:######### ####### ##### ### ##include <stdio.h>//输出倒三角形 int main(){ int n,i=1,j=0,k=0,sum; scanf("%d",&n); sum=2*n-1; while(n>0) { i=0...原创 2018-07-11 21:12:35 · 266 阅读 · 0 评论 -
习题2-4 子序列求和
输入两个正整数n<m<10^6,输出1/n^2+1/(n+1)^2+........+1/m^2,保留5位小数。输入包含多组数据,结束标记为n=m=0.样例输入:2 465536 6553600 0样例输出:case 1: 0.42361case 2:0.00001#include <stdio.h>//子序列求和int main(){ long long n=1,m...原创 2018-07-11 21:12:46 · 438 阅读 · 1 评论 -
习题 2-5 分数化小数
输入正整数a,b,c,输出a/b的小数形式,精确到小数点后c位,a,b<=10^6,c<=100。输入包含多组数据,结束标记为a=b=c=0.样例输入:1 6 40 0 0样例输出:case 1: 0.1667#include <stdio.h>//小数的显示问题已解决 #include <math.h>int main(){ int a,b,c,i...原创 2018-07-11 21:12:56 · 252 阅读 · 0 评论 -
习题2-6 排列
用1,2,3,4,。。。9组成3个三位数abc,def,ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3。按照“abc def ghi”的格式输出所有解,每行一个解。//习题2_6排列#include <stdio.h>int main(){ int abc,def,ghi,flag,i,j; int visit[8],number[8],a[8];...原创 2018-07-11 21:13:07 · 318 阅读 · 0 评论 -
例题 3-1 逆序输出
读入一些整数,逆序输出到一行中。已知整数不超过100个。#include <stdio.h>#define maxn 105int a[maxn];int main (){ int n,i=0; while(scanf("%d",&n)) { a[i]=n; i=i+1; } i=i-1; while(i>=0)...原创 2018-07-11 21:13:45 · 407 阅读 · 0 评论 -
习题3_2
习题3_3 数数字把前n(n<=10000)个整数顺次写在一起:123456789101112.....数一数0~9各出现了多少次(输出10个整数,分别为0,1,。。。。。,9出现的次数) /*习题3_3 数数字把前n(n<=10000)个整数顺次写在一起:123456789101112.....数一数0~9各出现了多少次(输出10个整数,分别为0,1,。。。。。,9出...原创 2018-11-29 20:26:11 · 304 阅读 · 0 评论