算法竞赛入门经典笔记
1.做题目之前先想一下题目的考点是什么,有哪些地方容易错
2.pi的精确表示:const double pi=acos(-1.0)
3.a==0可以简写成!a
4.如果以0为结束标记,就只需要&&n而不需要&&n!=0。
5.用%lf输出整型数据会出错,用%d输出浮点型数据也会出错,而不是舍去小数部分。
6.Gets只有遇到\n是才会结束输入;而%s遇到空白字符,即空格、制表符(Tab)、换行符会停止输入
7.输出格式:
%g:浮点数不显示无意义的零
“-”:左对齐
“+”:右对齐
%03d:空位补零
8.printf中double的输出用%f与%lf都一样。因为printf函数中float 会转换为double型,这是默认参数提升。
9.三角函数使用的是弧度而非角度
10.函数floor(x)返回不超过x的最大整数
11.用printf(Time is used = %.2f\n, (double)clock/CLOCK_PER_SEC);来计算输入数据到运行结束的时间
12.在Windows下,输入完毕后先按Enter键,再按Ctrl+Z键,最后按Enter键,即可结束输入。
13.重定向方式访问文件,可使输入输出只要scanf与printf,不需要fscanf与fprintf。需要在main函数的入口加入以下两条语句:
        Freopen(, r, stdin);
        Freopen(, w, stdout);
(重定向输入输出后就不能进行标准输入输出)
14.在多组数据的题目中,一个常见的错误是:在计算完一组数据后某些变量没有重置。即多组不相关的数据输入,要在while循环内对有影响的变量进行重置。、
15.运算符/的取整方向是朝零方向,即5/2=2,-5/2=-2
16.比较大的数组应尽量声明在main函数外面,否则程序可能无法执行
17.数组和字符串(字符数组)是不可以直接赋值和比较的(其中的单个元素可以),即进行“=”、“==”、“<等运算的,必须通过特定的函数。例如:memcpy、memset、strcpy(赋值)、strcmp(比较)、strcat(链接)。
18.从数组a中复制k个元素到数组b,可以这样做:memcpy(b, a, sizeof(int)*k);使用该函数是要包含头文件string.h
19.Menset(a, 0, sizeof(a));的作用是把数组a清零,它也定义在string.h中
20.Strchr(s, buf[i]);的作用是查字符串s中首次出现字符buf[i]的位置,若有则返回出现字符位置的指针,若没有返回NULL
21.Sprintf(buf, %d%d%d%d%d, abc, de, x, y, z);的作用是输出到字符串(字符数组)buf中
22.程序竞赛中,通常要求输出行的首位均无空格,所以%d_与_%d类型要特别注意,可以设置标记变量first来避免。还有另外一种情况,需要每个输出案例之间有空行,这个用if(n)来避免。
23.printf输出格式补0Isalpha(ch);可以用来判断字符ch是否为英文字母。若是,返回非零值;若不是,返回0。定义在头文件ctype.h中。
24.Isdigit(ch); 可以用来判断字符ch是否为数字。若是,返回非零值;若不是,返回0。定义在头文件ctype.h中。
25.Isprint(ch); 可以用来判断字符ch是否为可打印字符。若是,返回非零值;若不是,返回0。定义在头文件ctype.h中。
26.Hypot(x, y)函数用来计算三角形斜边长,其中x, y为三角形了两直角边;也可以在求距离的过程中使用
27.C++中getline (cin, s);函数可以用于读取一串字符,但s必须是string型