《算法竞赛入门经典》(第二版)笔记目录
第一部分 语言篇
第一章 程序设计入门
第二章 循环结构程序设计
第三章 数组和字符串
第四章 函数和递归
方法
出现的问题(有些真的想不太通,先记住好惹):
鸡兔同笼问题先写由题目得出的等式,结果如果正确就一定是偶数……毕竟兔和鸡都是偶数只脚。
求素数/谓词/质数(被1和他自身整除的、大于1的整数称为素数)只要求到平方根就行,因为任何一个数都不可能分解成两个大于其平方根的数的乘积,只能分解为一个大于或等于其平方根,另一个小于或等于其平方根
闰年:①能被400整除,②被4整除但不能被100整除
完全平方数:一个数能表示某个整数的平方形式
一个数里面打头的数取值范围是1~9,一个数里面打尾的数字才要被四舍五入
目前几乎在所有的比赛平台上,int都是32位整数即-2147483648~2147483647
25!的末尾有6个零,所以从第25开始,后面所有的项都不会影响和的末6位数字(因为1~25:5,10,15,20,25(5*5)一共有6个因数5,而因数5的个数决定末尾0的个数)
100这种看着就很少的次数有的时候题目简单可以用穷举法。
经常要用到的一些字母或者符号以及数字可以保存为常量数组。
函数
出现的函数:
include<math.h>
计算x的算术平方根:sqrt(x);
计算x的反余弦:acos(x);(acos(1.0)=π)
计算不超过x的最大整数:floor(x);
include<string.h>
从数组a赋值k个元素到数组b(int a[maxn],b[maxn];):memcpy(b,a,sizeof(int)*k);【浮点型数组就是double】
从数组a全部复制到数组b中:memcpy(b,a,sizeof(a));
在一个字符串数组中查找单个字符:strchr(s,buf[i]);(在一个字符都没读到的时候返回NULL)
#include
sort(数组名,数组末地址(sizeof(x)数组长度),compare); (若不写compare则默认升序排列)
#include <ctype.h>
判断字符是否是字母(大小写都算):isalpha(ch);(是字母返回1 ,否则返回 0)
判断字符是否是数字(0-9):isdigit(ch);(是字母返回1 ,否则返回 0)
检查ch是否是可打印字符(包括空格): isprint(ch); (是返回1 ,否则返回 0)
将ch字符转换成大写字母:toupper(ch);(返回ch所代表的的字符的大写字母)
将ch字符转换为小写字母:tolower(ch);(返回ch所代表的的字符的小写字母)
include <time.h>
计时函数:clock();在程序之前调用此函数,便可获得整个程序的运行时间。这个时间除以常数CLOCKS_PER_SEC只会得到的值以“秒”为单位
