拿着算法书,我实在不知从何开始。虽然想参加算法比赛,但是不论如何需要从基本开始掌握。心急往往会出错,索性我从书上的例题开始研究,顺便研究相关的知识点,全部都总结在博客里,也方便自己以后复习。我参考的书籍是 刘汝佳的《算法竞赛 入门经典》,以后不指出均以此书为准。
我的情况是以前学过C语言,但是使用的并不多,也很久没碰了,基本可以算是零基础,所以如果有类似情况的朋友也欢迎交流学习。
例题1-1 圆柱体的表面积
输入底面半径r和高h,输出圆柱体的表面积,保留3位小数。
样例输入:3.5 9
样例输出:Area=174.889
1 #include<stdio.h>
2 #include<math.h>
3 int main()
4 {
5 const double pi=4.0*atan(1.0);
6 double r,h,s1,s2,s;
7 scanf("%lf%lf", &r,&h);
8 s1=pi*r*r;
9 s2=2*pi*r*h;
10 s=s1*2.0+s2;
11 printf("Area= %.3lf\n",s);
12 return 0;
13 }
知识点:
1.pi的处理 这里用了4.0 * atan(1.0)的值,以为有的编辑器不知道pi这个常数(实际上是M_PI)所以记住 pi=4.0*atan(1.0)
同时不要忘记 include<math.h> ; 尽量以const关键字声明常数。
2.算法竞赛中每行输出均以回车结束,包括最后一行。每行的行首不应有空格,另外没两个数字或者字符串之间应该以单个空格隔开。
3.关于printf 的格式 只有%开头的部分才会被后面的值替换掉。
例题1-2 三位数反转
输入一个三位数,分理处它的百位 十位和个位, 反转后输出。
样例输入:123
样例输出:321
1 #include<stdio.h>
2 int main()
3 {
4 int n;
5 scanf("%d",&n);
6 printf("%d%d%d\n",n%10,n/10%10,n/100);
7 return 0;
8 }
如果用变量存储中间结果
#include<stdio.h>
2 int main()
3 {
4 int n,m;
5 scanf("%d",&n);
6 m=n%10*100+(n/10%10)*10+(n/100);
7 printf("%03d\n",m);
8 return 0;
9 }
知识点:
%03d 表示输出整数 如果不足三位 就补零。
例题1-3
1 /*
2 Function: exchange params
3 sample input: 824 16
4 sample output: 16 824
5 */
6
7 #include<stdio.h>
8
9 int main()
10 {
11 #if 0
12 //使用中间变量的中转的方法
13
14 int a, b,t;
15 scanf("%d%d", &a, &b);
16 t=a;
17 a=b;
18 b=t;
19 printf("%d %d\n", a,b);
20 #endif
21
22 #if 1
23 //不使用中间变量也可以完成 事实上并不需要真的交换变量
24 int a,b;
25 scanf("%d%d",&a,&b);
26 printf("%d %d\n", b, a);
27 #endif
28 return 0;
29 }
30
31
~