将代码保存为.cpp文件而不是.c文件(为了使用C++中的一些良好特性,故用C++的文件扩展名)提交代码时的选项也是C++而非C
对一般的OJ系统来说,一秒能承受的运算次数大概是 1 0 7 10^7 107~ 1 0 8 10^8 108
关于变量类型: 绝对值不超过 1 0 9 mathbb{10^9} 109都能用整型变量;若long long型赋的初值大于 2 31 − 1 2^{31}-1 231−1则需在初值后面加上LL,否则会编译错误。
对整型来说, 如果题目要求 1 0 9 10^9 109以内或者32位整数,就用int型存放;如果 1 0 18 10^{18} 1018以内或者64位整数,就要用long long型存放。
对浮点型来说,一般不使用float,碰到浮点型的数据都应该用double存储。对于double型变量,其输出格式是%f 而在scanf中是 %lf
对字符型来说,小写字母比大写字母的ASCII码值大32。 代表空字符NULL, 其ASCII码为0, 注意 不是空格
quadquadquadquadquad,,,,, 字符常量勿漏掉单引号标注, 打印时用%c ;而字符串常量用双引号标注, 存在字符型数组或string中, 打印时用%s
quadquadquadquadquad,,,,, 字符串在scanf中不用加&取址,因为数组名称已经代表了地址
关于scanf输入: 如果需要过滤一次换行符,可以单用一句 getchar();
quadquadquadquadquad,,,,,, 除了%c外, scanf对其他格式符(如%d)的输入都以空白符(即空格、Tab、回车)为结束判断标志。除非使用%c把空格按字符读入,其他情况都会自动跳过空格。( 注:结束的仅是一个%d 而不是整个一句scanf )
quadquadquadquadquad,,,,,, %s用来输入一个字符串并存在字符数组里,%c格式能够识别空格跟换行并将其输入,而%s通过空格或换行符来识别一个字符串的结束。另外,字符数组使用%s读入的时候也以空格跟换行为读入结束的标志。
quadquadquadquadquad,,,,,, 注:下图中若scanf中改为 scanf("%d %c %s",&a,&c,str); 则输出结果是 a=1,c=a,str=bcd
关于输出格式: %.mf , 可以让浮点数保留m位小数输出,这个“保留”使用的是精度的“四舍六入五成双”规则。很多题目都会要求浮点数的输出保留×位小数(或是精确到小数点后××位),就是用这个格式来进行输出(如果是四舍五入,那么需要用到round函数)
quadquadquadquadquad,, %0md , 只在%md中间多加了0。和%md的唯一不同点在于,当变量不足m位时,将在前面补足够数量的0而不是空格。
quadquadquadquadquad,, %md , 可以使不足m位的int型变量以m位进行右对齐输出,其中高位用空格补齐;如果变量本身超过m位,则保持原样。
关于数组: 如果数组大小较大(大概 1 0 5 10^5 105级别),则需要将其定义在主函数外面,否则会使程序异常退出。原因是函数内部申请的局部变量来自系统栈,允许申请的空间较小;而函数外部申请的全局变量来自静态存储区,允许申请的空间较大。
quadquadquad,,, 二维数组按行(逐行)赋值,如 int a[5][6] = { {1, 2, 3}, {1, 2}, {}, {1, 2, 3, 4, 5}, {} } ; 其他未被赋值的元素被默认赋为0
quadquadquad,,, 必须注意二维数组使用首地址 &a[0][0] 时只有 a[0] 与之可以等价互换, 而若像一维数组只用数组名 a 时并不等价
quadquadquad,,, 将数组的所有元素赋相同的值, 通常选用 fill函数 (详见经验总结)
关于字符数组: char str[15] = { ‘H’, ‘e’, ‘l’, ‘l’, ‘o’ , ’ ’ , ‘!’ }; 等效于 char str[15] = “Hello !”; 但后者只限于初始化,程序的其他位置不能这样直接将字符串赋值给字符数组。
quadquadquadquadquad, getchar和putchar各用来输入和输出单个字符。若需要把输入中每行末尾的换行符吸收掉可巧妙单用一行getchar();
quadquadquadquadquad, gets用来输入一行字符串(注意: gets识别换行符n作为输入结束,因此scanf完一个整数后,如果要使用gets,需要先用getchar吸收整数后的换行符),并将其存放在一维的字符数组(或二维数组中的一维)中;puts用来输出一行字符串,即将一维数组(或二维数组的一维)在界面上输出,并紧跟一个换行。
quadquadquadquadquad, 字符数组的每一位都是一个char字符,在一维字符数组的末尾都有一个空字符 即NULL,以表示存放的字符串的结尾。注意结束符 占用一个字符位,因此开字符数组的时候千万要记得字符数组的长度一定要比实际存储字符串的长度至少多1。还需注意如果不是使用scanf函数的%s格式或gets函数输入字符串(例如使用getchar), 一定要在输入的每个字符串后加入"