算法竞赛入门经典各章习题答案
算法竞赛入门经典 题单

算法竞赛入门经典题单以下是算法竞赛入门经典的一些题目:1. 两数之和2. 三数之和3. 最长回文子串4. 数组中去除重复项5. 盛最多水的容器6. 最长递增子序列7. 买卖股票的最佳时机8. 翻转二叉树9. 合并两个有序链表10. 合并K个升序链表11. 二分查找12. 寻找旋转排序数组中的最小值13. 矩阵中的路径14. 三数之积最大值15. 盛最多水的容器 II16. 最长回文子串 II17. 最长回文子串 III18. 最长公共子序列19. 二分查找的变种20. 二分搜索树中的第K小元素21. 二叉树的最大深度22. 二叉树的层序遍历23. 二叉树的镜像24. 二叉树中每个节点的值都不重复的子树个数25. 二叉树的叶子节点之和26. 二叉树中所有的路径长度之和27. 斐波那契数列28. 快慢指针解决链表问题29. 单链表中的插入节点问题30. 单链表中的删除节点问题31. 判断链表中是否有环32. 在链表中查找第k个节点33. 反转链表34. 对链表进行排序35. 约瑟夫环问题36. 括号匹配问题37. 二进制中1的个数问题38. 寻找数组中两个数,使得它们的和等于一个给定的值39. 寻找数组中最大的k个数40. 求一个数组中所有元素的和41. 求一个数组中的第k大元素42. 寻找数组中只出现一次的数字(经典的异或解法)43. 二分查找的变种(数组中连续子数组的长度)44. 在二叉搜索树中插入节点问题(先序、中序、后序遍历)45. 在二叉搜索树中查找最大值和最小值节点问题46. 二叉搜索树中查找是否存在某个节点的问题47. 二叉搜索树转换为排序的双向链表问题(中序遍历)。
最新算法竞赛入门经典各章(第二版)前4章课后习题答案电子教案

第一章习题1-1#include <stdio.h>int main(){int a,b,c;double d;scanf("%d%d%d",&a,&b,&c);d=(double)(a+b+c);printf("%.3lf\n",d/3.0);return 0;}习题1-2#include <stdio.h>int main(){int f;double c;scanf("%d",&f);c=5*(f-32)/9;printf("%.3lf\n",c);return 0;习题1-3#include <stdio.h>int main(){int n;scanf("%d",&n);printf("%d\n",(n*(1+n))/2);return 0;}习题1-4#include <stdio.h>#include <math.h>#define pi 4.0*atan(1.0)int main(){int n;scanf("%d",&n);printf("%lf\n",sin((pi*n)/180));printf("%lf\n",cos((pi*n)/180));return 0;习题1-5#include <stdio.h>int main(){double x1,y1,x2,y2,a;scanf("%lf %lf %lf %lf",&x1,&y1,&x2,&y2);a=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));printf("%lf\n",a);return 0;}习题1-6#include <stdio.h>int main(){int n;scanf("%d",&n);if(n%2==0){printf("YES\n");}else{printf("NO\n");}return 0;}习题1-7#include <stdio.h>int main(){int n;double a;scanf("%d",&n);a=n*95.0;if(a<300){printf("%.2lf\n",a);}else{printf("%.2lf\n",a*0.85);}return 0;}习题1-8#include <stdio.h>#include <math.h>int main(){double n;scanf("%lf",&n);printf("%.2lf",fabs(n));return 0;}习题1-9#include <stdio.h>int main(){int a,b,c;scanf("%d%d%d",&a,&b,&c);if(a==b&&b==c){printf("no\n");}if((a*a+b*b==c*c)||(a*a+c*c==b*b)||(b*b+c*c==a*a)) {printf("yes\n");}else{printf("no\n");}return 0;}习题1-10#include <stdio.h>int main(){int n;scanf("%d",&n);if(n%4==0){if(n%100!=0){printf("no\n");}else{if(n%400==0){printf("yes\n");}else{printf("no\n");}}}else{printf("no\n");}return 0;}第二章习题2-1#include <stdio.h>int main(){int n,count=0;scanf("%d",&n);while(n>0){count++;n=n/10;}printf("%d\n",count);return 0;}习题2-2#include <stdio.h>int main(){int a,b,c;for(int i=100;i<=999;i++){a=i%10;b=i/10%10;c=i/100;if(i==a*a*a+b*b*b+c*c*c){printf("%d\n",i);}}return 0;}习题2-3#include<stdio.h>int main(){int a,b,c,i,kase=1;while(~scanf("%d%d%d",&a,&b,&c)){for(i=10;i<=100;i++){if(i%3==a&&i%5==b&&i%7==c)printf("Case %d:%d\n",kase++,i);else if(i=100)printf("Case %d:No answer\n",kase++);} }return 0;}习题2-4#include<stdio.h>int main(){int n;while(~scanf("%d",&n)){for(int i=n;i>=0;i--){for(int j=n-i;j>0;j--)printf(" ");for(int j=2*i-1;j>0;j--)printf("#");printf("\n");}}}习题2-5文件题,南邮竞赛基本不涉及。
算法初步练习题及答案(ABC组)

1a = 3b = a a b =+ b a b =- PRINT a ,bIF 10a < THEN 2y a =*else y a a =*第一章:算法初步[基础训练A 组] 一、选择题1.下面对算法描述正确的一项是:( )A .算法只能用自然语言来描述B .算法只能用图形方式来表示C .同一问题可以有不同的算法D .同一问题的算法不同,结果必然不同 2.用二分法求方程022=-x 的近似根的算法中要用哪种算法结构( )A .顺序结构B .条件结构C .循环结构D .以上都用 3.将两个数8,17a b ==交换,使17,8a b ==,下面语句正确一组是 ( )4.计算机执行下面的程序段后,输出的结果是( )A .1,3B .4,1C .0,0D .6,0 5.当3=a 时,下面的程序段输出的结果是( )A .9B .3C .10D .6二、填空题1.把求 2按从大到小进行排序时,经过第一趟排序后得到的新数列为 。
3.用“秦九韶算法”计算多项式12345)(2345+++++=x x x x x x f ,当x=2时的值的过程中,要经过 次乘法运算和 次加法运算。
4.以下属于基本算法语句的是 。
① INPUT 语句;②PRINT 语句;③IF-THEN 语句;④DO 语句;⑤END 语句; ⑥WHILE 语句;⑦END IF 语句。
5.将389化成四进位制数的末位是____________。
三、解答题1.把“五进制”数)5(1234转化为“十进制”数,再把它转化为“八进制”数。
2.用秦九韶算法求多项式x x x x x x x x f ++++++=234567234567)(当3=x 时的值。
3.编写一个程序,输入正方形的边长,输出它的对角线长和面积的值。
4.某市公用电话(市话)的收费标准为:3分钟之内(包括3分钟)收取0.30元;超过3分钟部分按0.10元/分钟加收费。
设计一个程序,根据通话时间计算话费。
算法练习题-分章节-带答案

算法练习题---算法概述一、选择题1、下面关于算法的描述,正确的是()A、一个算法只能有一个输入B、算法只能用框图来表示C、一个算法的执行步骤可以是无限的D、一个完整的算法,不管用什么方法来表示,都至少有一个输出结果2、一位爱好程序设计的同学,想通过程序设计解决“韩信点兵”的问题,他制定的如下工作过程中,更恰当的是()A、设计算法,编写程序,提出问题,运行程序,得到答案B、分析问题,编写程序,设计算法,运行程序,得到答案C、分析问题,设计算法,编写程序,运行程序,得到答案D、设计算法,提出问题,编写程序,运行程序,得到答案3、下面说法正确的是()A、算法+数据结构=程序B、算法就是程序C、数据结构就是程序D、算法包括数据结构4、衡量一个算法好坏的标准是()。
A、运行速度快B、占用空间少C、时间复杂度低D、代码短5、解决一个问题通常有多种方法。
若说一个算法“有效”是指( )。
A、这个算法能在一定的时间和空间资源限制内将问题解决B、这个算法能在人的反应时间内将问题解决C、这个算法比其他已知算法都更快地将问题解决D、A和C6、算法分析中,记号O表示(),记号Ω表示()。
A.渐进下界B.渐进上界C.非紧上界D.非紧下界7、以下关于渐进记号的性质是正确的有:()A.f(n)(g(n)),g(n)(h(n))f(n)(h(n))=Θ=Θ⇒=ΘB.f(n)O(g(n)),g(n)O(h(n))h(n)O(f(n))==⇒=C. O(f(n))+O(g(n)) = O(min{f(n),g(n)})D.f(n)O(g(n))g(n)O(f(n))=⇔=8、记号O的定义正确的是()。
A. O(g(n)) = { f(n) | 存在正常数c和n0使得对所有n≥n0有:0≤f(n) ≤cg(n) };B. O(g(n)) = { f(n) | 存在正常数c和n0使得对所有n≥n0有:0≤cg(n) ≤f(n) };C. O(g(n)) = { f(n) | 对于任何正常数c>0,存在正数和n0 >0使得对所有n≥n0有0 ≤f(n)<cg(n) };D. O(g(n)) = { f(n) | 对于任何正常数c>0,存在正数和n0 >0使得对所有n≥n0有:0 ≤cg(n) <f(n) };9、记号Ω的定义正确的是()。
信息学奥赛—算法设计题集及详解

算法设计题集第一章算法初步第一节程序设计与算法一、算法算法是解决问题方法的精确描述,但是并不是所有问题都有算法,有些问题经研究可行,则相应有算法,但这并不是说问题就有结果。
上述的“可行”,是指对算法的研究。
1.待解问题的描述待解问题表述应精确、简练、清楚,使用形式化模型刻划问题是最恰当的。
例如,使用数学模型刻划问题是最简明、严格的,一旦问题形式化了,就可依据相应严格的模型对问题求解。
2.算法设计算法设计的任务是对各类具体问题设计良好的算法及研究设计算法的规律和方法。
常用的算法有:穷举搜索法、递归法、回溯法、贪心法、分治法等。
3.算法分析算法分析的任务是对设计出的每一个具体的算法,利用数学工具,讨论各种复杂度,以探讨某种具体算法适用于哪类问题,或某类问题宜采用哪种算法。
算法的复杂度分时间复杂度和空间复杂度。
.时间复杂度:在运行算法时所耗费的时间为f(n)(即 n的函数)。
.空间复杂度:实现算法所占用的空间为g(n)(也为n的函数)。
称O(f(n))和O(g(n))为该算法的复杂度。
二、程序设计1.程序程序是对所要解决的问题的各个对象和处理规则的描述,或者说是数据结构和算法的描述,因此有人说,数据结构+算法=程序。
2.程序设计程序设计就是设计、编制和调试程序的过程。
3.结构化程序设计结构化程序设计是利用逐步求精的方法,按一套程式化的设计准则进行程序的设计。
由这种方法产生的程序是结构良好的。
所谓“结构良好”是指:(1)易于保证和验证其正确性;(2)易于阅读、易于理解和易于维护。
按照这种方法或准则设计出来的程序称为结构化的程序。
“逐步求精”是对一个复杂问题,不是一步中学多元化信息素质教育 2000年6月就编成一个可执行的程序,而是分步进行。
.第一步编出的程序最为抽象;.第二步编出的程序是把第一步所编的程序(如过程、函数等)细化,较为抽象;.…….第i步编出的程序比第i-1步抽象级要低;.…….直到最后,第n步编出的程序即为可执行的程序。
【第二章】算法竞赛入门经典(第二版)-课后习题答案

2-1 Daffodil2017年10月1日12:561 #include<stdio.h>2 int main(void)3 {4 int shui,xian,hua;5 int n =100;6 int g,s,b;7 int sum =0;8 while(n <1000)9 {10 g =n%10;11 s =n/10%10;12 b =n/100;13 shui =g*g*g;14 xian =s*s*s;15 hua =b*b*b;16 sum =shui +xian +hua;17 if(sum ==n)printf("%d\n",n);18 n++;19 }20 return0;21 }2-2 Hanxin2017年10月1日12:591 #include<stdio.h>2 int main(void)3 {4 int s,w,q;5 int kase =0;6 while(scanf("%d%d%d", &s, &w, &q) !=EOF)7 {8 int i =0;9 int n =10;10 while(n <=101)11 {12 if(n%3==s &&n%5==w &&n%7==q &&n <=100)13 {14 printf("Case %d: %d\n", ++kase,n);15 i =1;16 }17 else if(n >100&&i ==0)printf("Case %d: No answer\n", ++kase);18 n++;19 }20 }21 return0;22 }2-3 Triangle2017年10月1日12:591 #include <stdio.h>2 int main()3 {4 int i, j, n;5 scanf("%d", &n);6 for(i = 0; i < n; i++)7 {8 for(j= 0; j< I; j++)9 printf(" ");10 for(j= 0; j< 2*(n-i)-1; j++)11 printf("#\n");12 }13return0;14}2-4 Subsequence2017年10月1日13:001 #include<stdio.h>2 int main(void)3 {4 long long n,m;5 int kase =0;6 for( ; ; )7 {8 scanf("%lld%lld", &n, &m);9 if(n ==0&&m ==0)break;10 double sum =0.0;11 while(n <=m)12 {13 long long a =n*n;14 double b = (double)1.0/a;15 sum +=b;16 n++;17 }18 printf("Case %d: %.5lf\n", ++kase,sum);19 }20 return0;21 }22 /*23 将所有int改为long long方才解决问题,为什么?24 long long n, m; 为什么不能为int n, m; ?25 */2-5 Decimal2017年10月1日13:001 #include<stdio.h>2 int main(void)3 {4 int a,b,c;5 int kase =0;6 int i;7 for(;;)8 {9 scanf("%d%d%d", &a, &b, &c);10 if(a ==0&&b ==0&&c ==0)break;11 a %=b;12 printf("Case %d: %d.", ++kase,a/b);13 for(i =1;i <c;i++)14 {15 printf("%d",a*10/b);16 a =a*10%b;17 }18 if(a%b*10*10/b >=5)19 printf("%d\n",a%b*10/b+1);20 else21 printf("%d\n",a%b*10/b);22 }23 return0;24 }25 /*26 循环+判断 可以避开数组...27 求余的式子很巧妙...28 */2-6 Permutation2017年10月1日13:001 #include<stdio.h>2 int main(void)3 {4 int a,b,c,d,e,f,g,h,i;5 int n =100;6 while(n <=333)7 {8 a =n/100;9 b =n/10%10;10 c =n%10;11 if(a ==b ||a ==c ||b ==c )12 n++;13 else if(b ==0||c ==0)14 n++;15 else16 {17 int n2 =n*2;18 d =n2/100;19 e =n2/10%10;20 f =n2%10;21 if(e ==0||f ==0)22 n++;23 else if(d ==e ||d ==f ||e ==f)24 n++;25 else if(d ==b ||d ==c)// d == a省略,百位不会相等26 n++;27 else if(e ==a ||e ==b ||e ==c)28 n++;29 else if(f ==a ||f ==b ||f ==c)30 n++;31 else32 {33 int n3 =n*3;34 g =n3/100;35 h =n3/10%10;36 i =n3%10;37 if(h ==0||i ==0)38 n++;39 else if(g ==h ||g ==i ||h ==i)40 n++;41 else if(g ==b ||g ==c ||g ==e ||g ==f)42 n++;43 else if(h ==a ||h ==b ||h ==c ||h ==d ||h ==e ||h ==f)43 else if(h ==a ||h ==b ||h ==c ||h ==d ||h ==e ||h ==f)44 n++;45 else if(i ==a ||i ==b ||i ==c ||i ==d ||i ==e ||i ==f)46 n++;47 else48 {49 printf("%d %d %d\n",n,n2,n3);50 n++;51 }52 }53 }54 }55 return0;56 }Chapter 2 Q&A2017年10月1日13:001 #include<stdio.h>2 int main(void)3 {4 int n,i;5 scanf("%d", &n);6 for(i =1;i <=n;i++)7 printf("%d\n",i);89 /*10 for(i = 1; i <= n; i++)11 printf("%d\n", 2*i); //任务一1213 for(i = 2; i <= 2*n; i+=2) //任务二14 printf("%d\n", i);15 */1617 return0;18 }1 #include<stdio.h>2 int main(void)3 {4 double i;5 for(i =0;i !=10;i +=0.1)6 printf("%.1f\n",i);7 return0;8 }。
算法竞赛-入门经典-作者刘汝佳

算法竞赛-入门经典-作者刘汝佳.doc第1部分语言篇第1章程序设计入门学习目标☑熟悉C语言程序的编译和运行☑学会编程计算并输出常见的算术表达式的结果☑掌握整数和浮点数的含义和输出方法☑掌握数学函数的使用方法☑初步了解变量的含义☑掌握整数和浮点数变量的声明方法☑掌握整数和浮点数变量的读入方法☑掌握变量交换的三变量法☑理解算法竞赛中的程序三步曲:输入、计算、输出☑记住算法竞赛的目标及其对程序的要求计算机速度快,很适合做计算和逻辑判断工作。
本章首先介绍顺序结构程序设计,其基本思路是:把需要计算机完成的工作分成若干个步骤,然后依次让计算机执行。
注意这里的“依次”二字——步骤之间是有先后顺序的。
这部分的重点在于计算。
接下来介绍分支结构程序设计,用到了逻辑判断,根据不同情况执行不同语句。
本章内容不复杂,但是不容忽视。
注意:编程不是看会的,也不是听会的,而是练会的,所以应尽量在计算机旁阅读本书,以便把书中的程序输入到计算机中进行调试,顺便再做做上机练习。
千万不要图快——如果没有足够的时间用来实践,那么学得快,忘得也快。
(为帮助没有分值的朋友能下载,特此修改文档,以免上传不了)1.1 算术表达式计算机的“本职”工作是计算,因此下面先从算术运算入手,看看如何用计算机进行复杂的计算。
程序1-1 计算并输出1+2的值#include<stdio.h>int main(){printf("%d\n", 1+2);return 0;}算法竞赛入门经典这是一段简单的程序,用于计算1+2的值,并把结果输出到屏幕。
如果你不知道如何编译并运行这段程序,可阅读附录或向指导教师求助。
即使你不明白上述程序除了“1+2”之外的其他内容,仍然可以进行以下探索:试着把“1+2”改成其他东西,而不要去修改那些并不明白的代码——它们看上去工作情况良好。
下面让我们做4个实验:实验1:修改程序1-1,输出3-4的结果实验2:修改程序1-1,输出5×6的结果实验3:修改程序1-1,输出8÷4的结果实验4:修改程序1-1,输出8÷5的结果直接把“1+2”替换成“3+4”即可顺利解决实验1,但读者很快就会发现:无法在键盘上找到乘号和除号。
算法竞赛入门经典第二版习题答案

求int的上限与下限#include <stdio.h>//运行时间长,请等待.int main(){int min ,max;FILE *fin,*fout;fin=fopen("min of int.out","wb");fout=fopen("max of int.out","wb");for(min=-1;min<0;){min-- ;}fprintf(fin,"%d\n",min+1);for(max=1;max>0;){max++ ;}fprintf(fout,"%d\n",max-1);fclose(fin);fclose(fout);return 0;}1-1#include <stdio.h>int main(){int a,b,c;scanf("%d%d%d",&a,&b,&c);double average;average=(a+b+c)/3.0; //一定要将int型转为浮点型printf("Average=%.3lf",average );system("pause");return 0;}1-2#include <stdio.h>int main(){double f,c;printf("请输入华氏温度f\n");scanf("%lf",&f);c=(f-32)*5/9 ;printf("摄氏温度c=%.3lf\n",c);return 0;}1-3#include <stdio.h>int main(){int n;scanf("%d",&n);printf("%d\n",(1+n)*n/2) ;system("pause");return 0;}1-4#include <stdio.h>#include <math.h>int main(){const double pi =4.0*atan(1.0);int n;scanf("%d",&n);while(n>=360){printf("请输入小于360°的角\n");scanf("%d",&n);}printf("正弦:%lf\n余弦:%lf",sin(n*pi/180),cos(n*pi/180));system("pause");return 0;}1-5#include <stdio.h>#include <math.h>int main(){double x1,y1,x2,y2;printf("请输入点A的坐标\n");scanf("%lf%lf",&x1,&y1);printf("请输入点B的坐标\n");scanf("%lf%lf",&x2,&y2);double d;d=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));printf("%.3lf\n",d);return 0;}1-6#include <stdio.h>int main(){int a;scanf("%d",&a);if(a%2==0)printf("该数是偶数");else printf("该数非偶数");system("pause");return 0;}1-7#include <stdio.h>int main(){const int a=95;int n;printf("你要买多少件衣服\n");scanf("%d",&n);if(a*n>=300)printf("需要%.2lf元\n",a*n*0.85);else printf("需要%.2lf元\n",(double)a*n); //由于输出是小数%.2lf,故一定要将int型转化为浮点型system("pause");return 0;}1-8#include <stdio.h>#include <stdio.h>int main(){double a;scanf("%lf",&a);if(a>0)printf("%.2lf",a);else printf("%.2lf",-a);system("pause");return 0;}1-9(方法一)#include <stdio.h>int main(){int a,b,c,max,min,middle;scanf("%d%d%d",&a,&b,&c);while(a<0||b<0||c<0){printf("三边必须都是大于零的正整数");scanf("%d%d%d",&a,&b,&c);}min=a;if(a>b)min=b;if(a>c)min=c;max=a;if(a<b)max=b;if(a<c)max=c;middle=a+b+c-min-max;if(min+middle>max)printf("yes");else printf("no");system("pause");return 0;}1-9(方法二) #include <stdio.h>int main(){int a,b,c,t=0;scanf("%d%d%d",&a,&b,&c);while(a<0||b<0||c<0){printf("三边必须都是大于零的正整数");scanf("%d%d%d",&a,&b,&c);}if(a>b){t=a;a=b;b=t;}if(a>c){t=a;a=c;c=t;}if(b>c){t=b;b=c;c=t;}if(a+b>c)printf("yes");else printf("no");system("pause");return 0;}1-10#include <stdio.h>int main(){int n;scanf("%d",&n);if(n%4==0){if(n%100==0){if(n%400==0){printf("yes");}else printf("no");}else printf("yes");}else printf("no");system("pause");return 0;}3n+1解决篇1#include <stdio.h>int main(){int count=0;double i,m;scanf("%lf",&i);for(;i>1;){m=i/2;if(floor(m+0.5)!=m){i=3*i+1;i/=2;count+=2;}//floor(x)取x的整数部分.else {i/=2;count++;}}printf("%d\n",count);system("pause");return 0;}3n+1解决篇2#include<stdio.h>int main(){long long n, count = 0;//long long 的取值范围:-2^63~2^63-1scanf("%I64d", &n);while(n > 1) {if(n % 2 == 1) n = n*3+1;else n /= 2;count++;}printf("%I64d\n", count);return 0;}数据统计解决篇#include <stdio.h>int main(){int x,n=0,s=0,min,max;while(scanf("%d",&x)==1){if(n==0){min=max=x;}//读取第一个数的时候将第一个数赋值给min和max s+=x;if(x<min)min=x;if(x>max)max=x;n++;}printf("%d %d %.3lf\n",min,max,(double)s/n);system("pause");return 0;}2-1(fin)#include <stdio.h>int main(){FILE *fin,*fout;fin=fopen("digit.in","rb");fout=fopen("digit.out","wb");/*fin=stdin;fout=stdout;*/int a,i=0;fscanf(fin,"%d",&a);while(1){a/=10;i++;if(a<1)break;}fprintf(fout,"%d\r\n",i);fclose(fin);fclose(fout);//system("pause");return 0;}2-1(freopen)#include <stdio.h>//#define LOCAL//在编译选项中定义LOCALint main(){#ifdef LOCALfreopen("digit.in","r",stdin);freopen("digit.out","w",stdout);#endifint a,i=0;scanf("%d",&a);while(1){a/=10;i++;if(a<1)break;}printf("%d\n",i);return 0;}2-2(freopen)#include <stdio.h>//#define LOCAL//编译选项中定义int main(){#ifdef LOCALfreopen("daffodil.out","w",stdout);#endifint a,b,c,m;for(a=1;a<=9;a++){for(b=0;b<=9;b++){for (c=0;c<=9;c++){m=a*100+b*10+c;if(m==a*a*a+b*b*b+c*c*c)printf("%d\n",m);}}}//system("pause");return 0;}2-2(fin)#include <stdio.h>int main(){FILE *fout;fout=fopen("daffodil.out","wb");int a,b,c,m;for(a=1;a<=9;a++){for(b=0;b<=9;b++){for(c=0;c<=9;c++){m=a*a*a+b*b*b+c*c*c;if(m==a*100+b*10+c)fprintf(fout,"%d\r\n",m);}}}fclose(fout);return 0;}2-3(fin)#include<stdio.h>int main(){FILE *fin,*fout;fin=fopen("hanxin.in","rb");fout=fopen("hanxin.out","wb");//fin=stdin;//fout=stdout;int a,b,c,x,temp=0;//temp用来判断是否在10到100内存在这样的数fscanf(fin,"%d%d%d",&a,&b,&c);for(x=10;x<=100;x++){if(x%3==a&&x%5==b&&x%7==c){fprintf(fout,"%d\r\n",x);temp=1;break;}}if(!temp)fprintf(fout,"No answer\r\n");fclose(fin);fclose(fout);return 0;}2-3(freopen)#include<stdio.h>{//会在编译选项中定义LOCAL#ifdef LOCALfreopen("hanxin.in","r",stdin);freopen("hanxin.out","w",stdout);#endifint a,b,c,x,temp=0;scanf("%d%d%d",&a,&b,&c);for(x=10;x<=100;x++){if(x%3==a&&x%5==b&&x%7==c){printf("%d\n",x);temp=1;break;}}if(!temp)printf("No answer\n");return 0;}2-4(fin)#include<stdio.h>int main(){FILE *fin,*fout;fin=fopen("triangle.in","rb");fout=fopen("triangle.out","wb");//fin=stdin;//fout=stdout;int n,i,j,k;fscanf(fin,"%d\r\n",&n);for(i=1;i<=n;i++){for(j=1;j<i;j++)fprintf(fout," ");for(k=-2*i+2*n+1;k>=1;k--)fprintf(fout,"*");fprintf(fout,"\r\n");}fclose(fin);fclose(fout);return 0;}2-4(freopen)#include<stdio.h>{//在编译选项内定义LOCAL#ifdef LOCALfreopen("triangle.in","r",stdin);freopen("triangle.out","w",stdout);#endifint n,i,j,k;scanf("%d",&n);for(i=1;i<=n;i++){for(j=1;j<i;j++)printf(" ");for(k=2*n+1-2*i;k>=1;k--)printf("*");printf("\n");}return 0;}2-5(fin)#include<stdio.h>int main(){FILE *fin,*fout;fin=fopen("stat.in","rb");int n,a,i,m,count=0;fscanf(fin,"%d",&n);for(i=1;i<=n+1;i++){fscanf(fin,"%d",&a);if(i==n+1)m=a;}fclose(fin);fin=fopen("stat.in","rb");for(i=0;i<=n;i++){fscanf(fin,"%d",&a);if(i!=0){if(a<m)count++;}}fclose(fin);fout=fopen("stat.out","wb");fprintf(fout,"%d\r\n",count);fclose(fout);return 0;}2-5(freopen) #include<stdio.h>int main(){freopen("stat.in","r",stdin);freopen("stat.out","w",stdout);int n,a,i,m,count=0;scanf("%d",&n);for(i=1;i<=n+1;i++){scanf("%d",&a);if(i==n+1)m=a;}freopen("stat.in","r",stdin);for(i=0;i<=n;i++){scanf("%d",&a);if(i!=0){if(a<m)count++;}}printf("%d\n",count);return 0;}2-6(fin) #include<stdio.h>int main(){FILE *fin,*fout;fin=fopen("harmony.in","rb");int n,i;double H=0;fscanf(fin,"%d",&n);for(i=1;i<=n;i++){H+=(double)1/i;}fclose(fin);fout=fopen("harmony.out","wb");fprintf(fout,"%.3lf\r\n",H);fclose(fout);return 0;}2-6(freopen) #include<stdio.h>int main(){#ifdef LOCALfreopen("harmony.in","r",stdin);freopen("harmony.out","w",stdout);#endifint n,i;double H=0;scanf("%d",&n);for(i=1;i<=n;i++){H=H+double/i;}printf("%.3lf",H);return 0;}2-7(fin) #include<stdio.h>int main(){FILE *fout;int i;double H=0;for(i=1;2*i-1<1000000;i++){if(i%2==1)H+=(double)1/(2*i-1);else H-=(double)1/(2*i-1);}fout=fopen("approximation.out","wb");fprintf(fout,"%lf\r\n",H);return 0;}2-7(freopen) #include<stdio.h>int main(){#ifdef LOCALfreopen("approximation.in","r",stdin);freopen("approximation.out","w",stdout);#endifint i;double H=0;for(i=1;2*i-1<1000000;i++){if(i%2==1)H+=(double)1/(2*i-1);else H-=(double)1/(2*i-1);}printf("%lf",H);return 0;}2-8(fin,double)#include<stdio.h>#include<time.h>int main(){FILE *fin,*fout;fin=fopen("subsequence.in","rb");fout=fopen("subsequence.out","wb");int n,m,i;double H=0;double ii;fscanf(fin,"%d%d",&n,&m);for(i=n;i<=m;i++){ii=(double)i*i;H+=1/ii;}fprintf(fout,"%.5lf\r\n",H);fprintf(fout,"%.2lf\r\n",(double)clock()/CLOCKS_PER_SEC);//比较double和long long运行效率fclose(fin);fclose(fout);return 0;}2-8(fin,long long)#include<stdio.h>#include<time.h>int main(){FILE *fin,*fout;fin=fopen("subsequence.in","rb");fout=fopen("subsequence.out","wb");int n,m,i;double H=0;fscanf(fin,"%d%d",&n,&m);for(i=n;i<=m;i++){long long ii=1;//定义ii=ii*i*i; //不用ii=i*i也不是ii*=i*i,这样做是为了防止i*i溢出; 可以认为这一步将int型转化为long long 型H+=1/(double)ii;//不是(double)1/ii}fprintf(fout,"%.5lf\r\n",H);fprintf(fout,"%.2lf\r\n",(double)clock()/CLOCKS_PER_SEC); ////比较double和long long运行效率fclose(fin);fclose(fout);return 0;}2-8(freopen)#include<stdio.h>#define LOCALint main(){#ifdef LOCALfreopen("subsequence.in","r",stdin);freopen("subsequence.out","w",stdout);#endifint n,m,i;double H=0,ii;scanf("%d%d",&n,&m);for(i=n;i<=m;i++){H+=1/((double)i*i);}printf("%.5lf\n",H);return 0;}2-9(fin)#include<stdio.h>int main(){FILE *fin,*fout;fin=fopen("decimal.in","rb");fout=fopen("decimal.out","wb");int a,b,c;fscanf(fin,"%d%d%d",&a,&b,&c);fprintf(fout,"%.*lf\r\n",c,(double)a/b);fclose(fin);fclose(fout);return 0;}2-9(freopen)#include<stdio.h>int main(){#ifdef LOCALfreopen("decimal.in","r",stdin);freopen("decimal.out","w",stdout);#endifint a,b,c;scanf("%d%d%d",&a,&b,&c);printf("%.*lf",c,(double)a/b);return 0;}2-10(全书看完再看这段代码) #include<cstdio>#include<algorithm>using namespace std;int main(){freopen("permutation.ans","w",stdout);int d[]={1,2,3,4,5,6,7,8,9};do{int a=d[0]*100+d[1]*10+d[2];int b=d[3]*100+d[4]*10+d[5];int c=d[6]*100+d[7]*10+d[8];if(c==3*a&&b==2*a)printf("%d %d %d\n",a,b,c);}while(next_permutation(d,d+9));return 0;}。
算法竞赛-入门经典-作者刘汝佳

算法竞赛入门经典目录目录 (110)第1章程序设计入门 (112)1.1 算术表达式 (112)1.2 变量及其输入 (114)1.3 顺序结构程序设计 (117)1.4 分支结构程序设计 (120)1.5 小结与习题 (123)1.5.1 数据类型实验 (123)1.5.2 scanf输入格式实验 (123)1.5.3 printf语句输出实验 (123)1.5.4 测测你的实践能力 (123)1.5.5 小结 (124)1.5.6 上机练习 (124)第2章循环结构程序设计 (110)2.1 for循环 (110)2.2循环结构程序设计 (113)2.3 文件操作 (116)2.4 小结与习题 (119)2.4.1输出技巧 (119)2.4.2浮点数陷阱 (120)2.4.3 64位整数 (120)2.4.4 C++中的输入输出 (120)2.4.5小结 (121)2.4.6 上机练习 (122)第4章函数和递归 (110)4.1 数学函数 (110)4.1.1 简单函数的编写 (110)4.1.2 使用结构体的函数 (111)4.1.3应用举例 (111)4.2 地址和指针 (114)4.2.1 变量交换 (114)4.2.2 调用栈 (115)4.2.3 用指针实现变量交换 (117)4.2.4初学者易犯的错误 (118)4.3 递归 (119)4.3.1 递归定义 (119)4.3.2递归函数 (120)算法竞赛入门经典4.3.3 C语言对递归的支持 (120)4.3.4 段错误与栈溢出 (122)4.4 本章小结 (123)4.4.1 小问题集锦 (123)4.4.2小结 (124)第6章数据结构基础 (1)6.1 栈和队列 (1)6.1.1 卡片游戏 (1)6.1.2铁轨 (2)6.2 链表 (4)6.2.1 初步分析 (4)6.2.2链式结构 (6)6.2.3对比测试 (7)6.2.4随机数发生器 (8)6.3 二叉树 (9)6.3.1 小球下落 (9)6.3.2层次遍历 (10)6.3.3 二叉树重建 (14)6.4 图 (15)6.4.2走迷宫 (16)6.4.3拓扑排序 (18)6.4.4欧拉回路 (18)6.5训练参考 (19)第8章高效算法设计 (1)8.1 算法分析初步 (1)8.1.1 渐进时间复杂度 (1)8.1.2上界分析 (2)第1章程序设计入门第1部分语言篇第1章程序设计入门学习目标☑熟悉C语言程序的编译和运行☑学会编程计算并输出常见的算术表达式的结果☑掌握整数和浮点数的含义和输出方法☑掌握数学函数的使用方法☑初步了解变量的含义☑掌握整数和浮点数变量的声明方法☑掌握整数和浮点数变量的读入方法☑掌握变量交换的三变量法☑理解算法竞赛中的程序三步曲:输入、计算、输出☑记住算法竞赛的目标及其对程序的要求计算机速度快,很适合做计算和逻辑判断工作。
C语言算法经典习题及其答案详解

break; if(i>k) return 1; else return 0; } 五、排序问题 1、选择法排序(升序) 基本思想: 1)对有 n 个数的序列(存放在数组 a[n]中),从中选出最小的数,与第 1 个数交 换位置; 2)除第 1 个数外,其余 n-1 个数中选最小的数,与第 2 个数交换位置; 3)依次类推,选择了 n-1 次后,这个数列已按升序排列。 程序代码如下: #include<stdio.h> #include<math.h> #define N 10 void main() { int i,j,imin,s,a[N]; printf("input 10 numbers:"); for(i=0;i<N;i++) scanf("%d",&a[i]); for(i=0;i<N-1;i++) { imin=i; for(j=i+1;j<N;j++) if(a[imin]>a[j]) imin=j; if(i!=imin) 6 { s=a[i]; a[i]=a[imin]; a[imin]=s; } } for(i=0;i<N;i++) printf("%4d",a[i]); printf("\n"); } 2、冒泡法排序(升序) 基本思想:(将相邻两个数比较,小的调到前头) 1)有 n 个数(存放在数组 a(n)中),第一趟将每相邻两个数比较,小的调到前头,
printf("please input the second array:"); for(i=0;i<10;i++) scanf("%d",&b[i]); ia=0; ib=0; ic=0; while(ia<10&&ib<10) { if(a[ia]<b[ib]) { c[ic]=a[ia]; ia++; } else { c[ic]=b[ib]; ib++; } ic++; } while(ia<=9) { c[ic]=a[ia]; ia++; ic++; } 8 while(ib<=9) { c[ic]=b[ib]; ib++; ic++; } for(i=0;i<20;i++) printf("%2d",c[i]); printf("\n"); } 六、查找问题 1、顺序查找法(在一列数中查找某数 x) 基本思想:一列数放在数组 a[1]---a[n]中,待查找的数放在 x 中,把 x 与 a 数组 中的元素从头到尾一一进行比较查找。用变量 p 表示 a 数组元素下标,p 初值为 1,使 x 与 a[p]比较,如果 x 不等于 a[p],则使 p=p+1,不断重复这个过程;一旦 x 等于 a[p]则退出循环;另外,如果 p 大于数组长度,循环也应该停止。 程序代码如下:
算法设计与分析习题答案1-6章

习题11.图论诞生于七桥问题。
出生于瑞士的伟大数学家欧拉(Leonhard Euler ,1707—1783)提出并解决了该问题。
七桥问题是这样描述的:一个人是否能在一次步行中穿越哥尼斯堡(现在叫加里宁格勒,在波罗的海南岸)城中全部的七座桥后回到起点,且每座桥只经过一次,图1.7是这条河以及河上的两个岛和七座桥的草图。
请将该问题的数据模型抽象出来,并判断此问题是否有解。
七桥问题属于一笔画问题。
输入:一个起点 输出:相同的点 1, 一次步行2, 经过七座桥,且每次只经历过一次 3, 回到起点该问题无解:能一笔画的图形只有两类:一类是所有的点都是偶点。
另一类是只有二个奇点的图形。
2.在欧几里德提出的欧几里德算法中(即最初的欧几里德算法)用的不是除法而是减法。
请用伪代码描述这个版本的欧几里德算法 1.r=m-n2.循环直到r=0 2.1 m=n 2.2 n=r 2.3 r=m-n 3 输出m3.设计算法求数组中相差最小的两个元素(称为最接近数)的差。
要求分别给出伪代码和C ++描述。
//采用分治法//对数组先进行快速排序 //在依次比较相邻的差 #include <iostream> using namespace std;int partions(int b[],int low,int high) {图1.7 七桥问题int prvotkey=b[low];b[0]=b[low];while (low<high){while (low<high&&b[high]>=prvotkey)--high;b[low]=b[high];while (low<high&&b[low]<=prvotkey)++low;b[high]=b[low];}b[low]=b[0];return low;}void qsort(int l[],int low,int high){int prvotloc;if(low<high){prvotloc=partions(l,low,high); //将第一次排序的结果作为枢轴 qsort(l,low,prvotloc-1); //递归调用排序由low 到prvotloc-1qsort(l,prvotloc+1,high); //递归调用排序由 prvotloc+1到 high}}void quicksort(int l[],int n){qsort(l,1,n); //第一个作为枢轴,从第一个排到第n个}int main(){int a[11]={0,2,32,43,23,45,36,57,14,27,39};int value=0;//将最小差的值赋值给valuefor (int b=1;b<11;b++)cout<<a[b]<<' ';cout<<endl;quicksort(a,11);for(int i=0;i!=9;++i){if( (a[i+1]-a[i])<=(a[i+2]-a[i+1]) )value=a[i+1]-a[i];elsevalue=a[i+2]-a[i+1];}cout<<value<<endl;return 0;}4.设数组a[n]中的元素均不相等,设计算法找出a[n]中一个既不是最大也不是最小的元素,并说明最坏情况下的比较次数。
算法竞赛入门经典各章(第二版)前4章课后习题答案

(c!=d)&&(c!=d)&&(c!=e)&&(c!=f)&&(c!=g)&&(c!=h)&&(c!=i)&&
(d!=e)&&(d!=f)&&(d!=g)&&(d!=h)&&(d!=i)&&(e!=f)&&(e!=g)&&
{
int n;
scanf("%d",&n);
if(n%4==0)
{
if(n%100!=0)
{
printf("no\n");
}
else
{
if(n%400==0)
{
printf("yes\n");
}
else
{
printf("no\n");
}
}
}
else
{
printf("no\n");
}
return 0;
{
int n;
double a;
scanf("%d",&n);
a=n*95.0;
if(a<300)
{
printf("%.2lf\n",a);
}
else
算法竞赛入门经典(第2版)

10 数学概念与方法
10.3 其他数学专题
10.3.1 递推 10.3.2 数学期望 10.3.3 连续概率
11 图论模型与算法
11.1
A
再谈树
11.4 网
D
络流初步
11.2 最
B
小生成树
11.5 竞
E
赛题目选
讲
11.3 最
C
短路问题
11.6 训
F
练参考
11 图论模型与算 法
11.7 总结与展望
11 图论模型与算法
11.1 再谈树
11.1.1 无根树转有根树 11.1.2 表达式树
11 图论模型与算法
11.2 最小生成树
11.2.1 Kruskal算法 11.2.2 竞赛题目选解
11 图论模型与算法
11.3 最短路问题
11.3.1 Dijkstra算法 11.3.2 Bellman-Ford算法 11.3.3 Floyd算法 11.3.4 竞赛题目选讲
6.3 树和二叉树
6.3.1 二叉树的编号 6.3.2 二叉树的层次遍历 6.3.3 二叉树的递归遍历 6.3.4 非二叉树
6 数据结构基础
6.4 图
6.4.1 用DFS求连通块 6.4.2 用BFS求最短路 6.4.3 拓扑排序 6.4.4 欧拉回路
7 暴力求解法
7.1 简单 枚举
7.4 回溯 法
11 图论模型与 算法
11.4 网络流初步
11.4.1 最大流问题 11.4.2 增广路算法 11.4.3 最小割最大流定理 11.4.4 最小费用最大流问题 11.4.5 应用举例
12 高级专题
12.1 知 识点选讲
12.2 难 题选解
算法竞赛入门经典 第二版 课后习题答案

5 char s[maxn][maxn];
6 int start_num[maxn][maxn];
7 using namespace std;
8 int Across(int i, int j, int c){
9
if(start_num[i][j] != 0)
10
{
11
if(start_num[i][j] < 10)
7 int main(void)
8{
9
int n;
10
cin >> n;
11
while(n)
12
{
13
string s;
14
double ans = 0;
15
cin >> s;
16
for(int i = 0;i < s.size();i++)
17
{
18
int num;
19
if(isupper(s[i]))
10
if(x == 0)
11
return false;
12
else
13
return true;
14
break;
15
case 2:
16
if(x == 4)
17
return false;
18
else
19
return true;
20
break;
21
case 3:
22
if(y == 4)
23
return false;
95
{
96
s[x][y] = s[x][y+1];
算法初步练习题(附详细答案)

算法初步练习题一、选择题:1.阅读下面的程序框图,则输出的S =A .14B .20C .30D .552.阅读图2所示的程序框图,运行相应的程序,输出的结果是A .1 B. 2 C. 3 D. 43.阅读右图所示的程序框图,运行相应的程序,输出的结果是A .2B .4C .8D .164.某程序框图如图所示,该程序运行后输出的k 的值是A .4B .5C .6D .75.执行右面的程序框图,输出的S 是3题 2题1题4题A .378-B .378C .418-D .4186.如图的程序框图表示的算法的功能是A .计算小于100的奇数的连乘积B .计算从1开始的连续奇数的连乘积C .从1开始的连续奇数的连乘积,当乘积大于100时,计算奇数的个数D .计算100531≥⨯⋅⋅⋅⨯⨯⨯n 时的最小的n 值.7.右图是把二进制数)2(11111化为十进制数的一个程序框图,判断框内应填入的 条件是A .4i >B .4i ≤C .5i >D .5i ≤8.某程序框图如图所示,则该程序运行后输出的B 等于 A .15 B .29 C .31 D .635题6题9.如果执行右边的程序框图,输入2,0.5x h =-=,那么输出的各个数的和等于 A .3 B .3.5 C .4 D .10.某店一个月的收入和支出总共记录了N 个数据1a ,2,,N a a ⋅⋅⋅,其中 收入记为 正数,支出记为负数。
该店用右边的程序框图计算月总收入S 和月 净盈利V ,那么在图中空白的判断框和处理框中,应分别填入下列四个选项中 的A .0,A V S T >=-B .0,A V S T <=-C .0,A V S T >=+D .0,A V S T <=+ 11. 如图1所示,是关于闰年的流程,则 以下年份是闰年的为A .1996年B .1998年C .2010年D .2100年12. 某流程如右上图所示,现输入如下四个函数,则可以输出的函数是11题A .2)(x x f =B .xx f 1)(=C .62ln )(-+=x x x fD .x x f sin )(=二、填空题:13.程序框图(即算法流程图)如图所示,其输出结果是_______. 14.执行右边的程序框图,输出的T = .15.下面的程序框图表示的算法的结果是 1612题13题16.阅读右上面的流程图,若输入6,1a b ==,则输出的结果是 217右面的程序框图,如果输入三个实数a ,b ,c ,要求输出这三个数中最大的数,那么在空白的判断框中,应该填入下面四个选项中的 ①c x > ②x c > ③C .c b > ④b c >三、解答题:15题18.已知数列{a n }的各项均为正数,观察程序框图,若10,5==k k 时,分别有2110115==S S 和 (1)试求数列{a n }的通项; (2)令m a n b b b b n +++=...,221求的值.参考答案1.C .【解读与点评】当1=i 时, S =1;当i =2时, S =5;循环下去,当i =3时, S =14; 当i =4时,S =30;本试题考查了程序框图的运用.2.D 【解读与点评】本题考查是算法的重新框图与算法的语句识别.易错点是 不懂得运行顺序.当1,2n S ==代入程序中运行第一次是1S =-,然后赋值此时2n =;返回运 行第二次可得111(1)2S ==--,然后赋值3n =; 再返回运行第三次可得12112S ==-,然后赋值4n =,判断可知此时2S =,故输出4n =.故选D .3.C 【解读与点评】本题考查是算法的重新框图与算法的语句识别.考查学生 运算求解能力.本题的易错点是要注意是先赋值再输出.当1,2n S ==代入程序中运行第一次是1S =-,然后赋值此时2n =;返回运 行第二次可得111(1)2S ==--,然后赋值4n =; 再返回运行第三次可得12112S ==-,然后赋值8n =,判断可知此时2S =,故输出8n =. 4.A .【解读与点评】对于0,1,k s ==1k ∴=.对于1,3,2k s k ==∴=,则2,38,3k s k ==+∴=,后面是113,382,4k s k ==++∴=,不符合条件时输出的4k =.此题是新课程新增内容,考查了程序语言的概念和基本的应用,通 过对程序语言的考查,充分体现了数学程序语言中循环语言的关键. 9.B .【解读与点评】循环9次,对应输出值如下表。
算法竞赛入门经典各章习题答案.docx

第一章习题1-1#include <stdio.h>int main(){int a,b,c;double d;scanf("%d%d%d",&a,&b,&c);d=(double)(a+b+c);printf("%.3lf\n",d/3.0);return 0;}习题1-2#include <stdio.h>int main(){int f;double c;scanf("%d",&f);c=5*(f-32)/9;printf("%.3lf\n",c);return 0;}习题1-3#include <stdio.h>int main(){int n;scanf("%d",&n);printf("%d\n",(n*(1+n))/2);return 0;}习题1-4#include <stdio.h>#include <math.h>#define pi 4.0*atan(1.0)int main(){int n;scanf("%d",&n);printf("%lf\n",sin((pi*n)/180));printf("%lf\n",cos((pi*n)/180));return 0;}习题1-5#include <stdio.h>int main(){double x1,y1,x2,y2,a;scanf("%lf %lf %lf %lf",&x1,&y1,&x2,&y2);a=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));printf("%lf\n",a);return 0;}习题1-6#include <stdio.h>int main(){int n;scanf("%d",&n);if(n%2==0){printf("YES\n");}else{printf("NO\n");}return 0;}习题1-7#include <stdio.h>int main(){int n;double a;scanf("%d",&n);a=n*95.0;if(a<300){printf("%.2lf\n",a);}else{printf("%.2lf\n",a*0.85);}return 0;}习题1-8#include <stdio.h>#include <math.h>int main(){double n;scanf("%lf",&n);printf("%.2lf",fabs(n));return 0;}习题1-9#include <stdio.h>int main(){int a,b,c;scanf("%d%d%d",&a,&b,&c);if(a==b&&b==c){printf("no\n");}if((a*a+b*b==c*c)||(a*a+c*c==b*b)||(b*b+c*c==a*a)) {printf("yes\n");}else{printf("no\n");}return 0;}习题1-10#include <stdio.h>int main(){int n;scanf("%d",&n);if(n%4==0){if(n%100!=0){printf("no\n");}else{if(n%400==0){printf("yes\n");}else{printf("no\n");}}}else{printf("no\n");}return 0;}第二章习题2-1#include <stdio.h>int main(){int n,count=0;scanf("%d",&n);while(n>0){count++;n=n/10;}printf("%d\n",count);return 0;}习题2-2#include <stdio.h>int main(){int a,b,c;for(int i=100;i<=999;i++){a=i%10;b=i/10%10;c=i/100;if(i==a*a*a+b*b*b+c*c*c){printf("%d\n",i);}}return 0;}习题2-3#include <stdio.h>int main(){int i,a,b,c;scanf("%d%d%d",&a,&b,&c);for(i=10;i<=100;i++){if(i%3==a&&i%5==b&&i%7==c){printf("%d\n",i);}}if(i==101){printf("no answer\n");}return 0;}习题2-4#include <stdio.h>int main(){int i,j,k,n;scanf("%d",&n);for(i=n;i>0;i--){for(k=0;k<n-i;k++){printf(" ");}for(j=0;j<2*i-1;j++){printf("#");}printf("\n");}return 0;}习题2-5文件题,南邮竞赛基本不涉及。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一章习题1-1#include<stdio.h>int main(){int a,b,c;double d;scanf("%d%d%d",&a,&b,&c);d=(double)(a+b+c);printf("%.3lf\n",d/3.0);return0;}习题1-2#include<stdio.h>int main(){int f;double c;scanf("%d",&f);c=5*(f-32)/9;printf("%.3lf\n",c);return0;}习题1-3#include<stdio.h>int main(){int n;scanf("%d",&n);printf("%d\n",(n*(1+n))/2);return0;}习题1-4#include<stdio.h>#include<math.h>#define pi4.0*atan(1.0)int main(){int n;scanf("%d",&n);printf("%lf\n",sin((pi*n)/180));printf("%lf\n",cos((pi*n)/180));return0;}习题1-5#include<stdio.h>int main(){double x1,y1,x2,y2,a;scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);a=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));printf("%lf\n",a);return0;}习题1-6#include<stdio.h>int main(){int n;scanf("%d",&n);if(n%2==0){printf("YES\n");}else{printf("NO\n");}return0;}习题1-7#include<stdio.h>int main(){int n;double a;scanf("%d",&n);a=n*95.0;if(a<300){printf("%.2lf\n",a);}else{printf("%.2lf\n",a*0.85);}return0;}习题1-8#include<stdio.h>#include<math.h>int main(){double n;scanf("%lf",&n);printf("%.2lf",fabs(n));return0;}习题1-9#include<stdio.h>int main(){int a,b,c;scanf("%d%d%d",&a,&b,&c);if(a==b&&b==c){printf("no\n");}if((a*a+b*b==c*c)||(a*a+c*c==b*b)||(b*b+c*c==a*a)) {printf("yes\n");}else{printf("no\n");}return0;}习题1-10#include<stdio.h>int main(){int n;scanf("%d",&n);if(n%4==0){if(n%100!=0){printf("no\n");}else{if(n%400==0){printf("yes\n");}else{printf("no\n");}}}else{printf("no\n");}return0;}第二章习题2-1#include<stdio.h>int main(){int n,count=0;scanf("%d",&n);while(n>0){count++;n=n/10;}printf("%d\n",count);return0;}习题2-2#include<stdio.h>int main(){int a,b,c;for(int i=100;i<=999;i++){a=i%10;b=i/10%10;c=i/100;if(i==a*a*a+b*b*b+c*c*c){printf("%d\n",i);}}return0;}习题2-3#include<stdio.h>int main(){int i,a,b,c;scanf("%d%d%d",&a,&b,&c);for(i=10;i<=100;i++){if(i%3==a&&i%5==b&&i%7==c){printf("%d\n",i);}}if(i==101){printf("no answer\n");}return0;}习题2-4#include<stdio.h>int main(){int i,j,k,n;scanf("%d",&n);for(i=n;i>0;i--){for(k=0;k<n-i;k++){printf("");}for(j=0;j<2*i-1;j++){printf("#");}printf("\n");}return0;}习题2-5文件题,南邮竞赛基本不涉及。
习题2-6#include<stdio.h>int main(){int i,n;double sum=1.0;scanf("%d",&n);for(i=2;i<=n;i++){sum+=(1.0/i);}printf("%.3lf\n",sum);return0;}习题2-7#include<stdio.h>#include<math.h>int main(){int t=-1;double a=1.0,sum=1.0;while(fabs(a)>=0.000001){a=1.0/(a+2);a=a*t;sum=sum+a;t=t*(-1);}printf("%.9lf\n",sum);return0;}习题2-8#include<stdio.h>int main(){int i,n,m,temp;double sum=0;scanf("%d%d",&n,&m);if(n>m){temp=n;n=m;m=temp;}for(i=n;i<=m;i++){sum=sum+(1.0/i/i);}printf("%.5lf\n",sum);return0;}习题2-9printf的特殊用法:对于m.n的格式可以用如下方法表示char ch[20];printf("%*.*s\n",m,n,ch);前边的*定义的是总的宽度,后边的定义的是输出的个数。
分别对应外面的参数m和n。
这种方法的好处是可以在语句之外对参数m和n赋值,从而控制输出格式。
#include<stdio.h>int main(){int a,b,c;scanf("%d%d%d",&a,&b,&c);printf("%.*lf\n",c,(double)a/b);return0;}习题2-10#include<stdio.h>int main(){int a,b,c,d,e,f,g,h,i;for(a=1;a<=9;a++){for(b=1;b<=9;b++){for(c=1;c<=9;c++){for(d=1;d<=9;d++){for(e=1;e<=9;e++){for(f=1;f<=9;f++){for(g=1;g<=9;g++){for(h=1;h<=9;h++){for(i=1;i<=9;i++){if((2*(a*100+b*10+c)==1*(d*100+e*10+f))&&(3*(a*100+b*10+c)==1*(g*100+h*10+i))& &(a!=b)&&(a!=c)&&(a!=d)&&(a!=e)&&(a!=f)&&(a!=g)&&(a!=h)&&(a!=i)&&(b!=c)&&(b!=d)&&(b! =e)&&(b!=f)&&(b!=g)&&(b!=h)&&(b!=i)&&(c!=d)&&(c!=e)&&(c!=f)&&(c!=g)&&(c!=h)&&(c!=i) &&(d!=e)&&(d!=f)&&(d!=g)&&(d!=h)&&(d!=i)&&(e!=f)&&(e!=g)&&(e!=h)&&(e!=i)&&(f!=g)&&( f!=h)&&(f!=i)&&(g!=h)&&(g!=i)&&(h!=i)){printf("%d,%d,%d\n",a*100+b*10+c,d*100+e*10+f,g*100+h*10+i);}}}}}}}}}}return0;}第三章习题3-1#include<stdio.h>#include<string.h>int main(){int i,a[101],n,max;memset(a,sizeof(a),0);while(scanf("%d",&n)==1){a[n]++;}max=a[0];for(i=1;i<101;i++){if(a[i]>=max){max=a[i];}}for(i=0;i<101;i++){if(a[i]==max){printf("%d",i);}}printf("\n");return0;}习题3-2#include<stdio.h>#include<ctype.h>char s[1000];int main(){char ch;int i,j,m=0,sumlong=0,count=0;while(1){scanf("%c",&ch);if(ch=='\n'||ch==EOF){break;}else{s[m++]=ch;}}for(i=m-1;i>0;i--){if(s[i]==''&&s[i-1]==''){for(j=i-1;j<m-1;j++){s[j]=s[j+1];}m--;}}for(i=0;i<m;i++){if(isalpha(s[i])){sumlong++;}else if(s[i]==''){count++;}}printf("%.2lf\n",(double)((sumlong+count+1)/(count+1)));return0;}习题3-3(重新做!!!)#include<stdio.h>#include<ctype.h>#define mod1000char s[10000];char buf[10000];int main(){int i,m=0,n=0,sum=1;char ch;while(1){scanf("%c",&ch);if(ch==EOF||ch=='\n'){break;}else{s[m++]=ch;}}for(i=0;i<m;i++){if(isdigit(s[i])){buf[n++]=s[i]-'0';}}for(i=0;i<n;i++){sum=sum*buf[i];}printf("%d\n",sum%mod);return0;}习题3-4习题3-5#include<stdio.h>char a[1000][1000];int main(){int i,j,n;scanf("%d",&n);scanf("");char temp;for(i=0;i<n;i++){for(j=0;j<n;j++){scanf("%c",&a[i][j]);}}for(i=0;i<n;i++){for(j=i;j<n;j++){temp=a[i][j];a[i][j]=a[j][i];a[j][i]=temp;}}for(i=n-1;i>=0;i--){for(j=0;j<n;j++){printf("%c",a[i][j]);}printf("\n");}return0;}习题3-6#include<stdio.h>int main(){int b,n,m=0;char p[100];scanf("%d%d",&b,&n);while(b!=0){p[m++]=b%n+'0';b=b/n;}for(int i=m-1;i>=0;i--){printf("%c",p[i]);}printf("\n");return0;}习题3-7#include<stdio.h>int ndjc(int n,int m){int i,a=1;for(i=0;i<n;i++){a*=m;}return a;}int main(){int i,b,n,p[100],m=0,a=0;scanf("%d%d",&n,&b);while(n>0){p[m++]=n%10;n=n/10;}m--;for(i=m;i>=0;i--){a+=p[i]*ndjc(i,b);}printf("%d\n",a);return0;}习题3-8。