简介
《深入浅出程序设计竞赛》是洛谷站长出的书,帮助青少年上手C++算法竞赛。书中对学习算法竞赛的顺序编排非常好,很系统,很适合用于算法竞赛入门。文章最后有书籍pdf版。
下面是我从基础语言入门部分(第一部分)总结出来的精华笔记。
文件操作
在文件里创建 title.in文件
freeopen("title.in","w",stdin);
freeopen("title.out","r",stdout);
头文件
cstdio头文件
//输入
scanf("%d",&a)
//输出
printf(%d,a);
cmath头文件:
包含一系列数学函数
根号sqrt, 几次方pow
algorithm头文件:
一系列算法函数
min, max, sort, swap
cstring头文件:
用于char字符串
strlen获取字符串长度,strcpy复制字符串内容
fgets读入字符串,sscanf获取字符串,sprintf输
杂货
ASCII码:
‘A’=66, ‘a’=97
强制转换:
(int)a
函数:
stat(int a) //在这个函数里面对放入的a进行修改,函数外是不会生效的。
stat(int &a) //相当于给放入的变量取了个别名,对其修改,该变量也会改变。
stat(int a[]) //相当于传入&a[]
scanf("%d",&n) //这也是一样,相当于把n的地址告诉函数,这样才能输入到n中。
左移/右移运算符
//左移运算符
i<<n = i*2^n^
//右移运算符
i>>n=i/2^n^
随机数
#include <cstdlib>
#include <ctime>
srand(time(0))
ans=rand()%a //生成0到(a-1)随机数
//ans=rand()%(b-a+1)+a 生成a到b随机数
异或运算符: ^
一个成立一个不成立
true^false=true
true^true=false
字符串
char字符串
结束标记字符:’\0’
读入字符串方法:
scanf("%s",s);
cin>>s;
这两种方法只能读到空格或者换行就会终止
如果要输入包括空格或换行的字符串,并存入一个字符串中,就用下面这种方法
while (1) {
s = getchar();//读入字符
if (s == EOF) break;
//...
putchar(s);
}
结束输入的时候,要使用组合键Ctrl+Z,然后回车。
这是因为getchar返回EOF(End of file)代表文件读入完毕。
windows下输入Ctrl+z / Linux下输入Ctrl+D 来输入EOF标记
string字符串
加强版字符串,可以赋值、拼接
字符串string需要使用头文件 string,包括下面的常用方法
//定义字符串变量s
string s;
//拼接字符串1
s+=str;
//拼接字符串2
s.append(str);
//比较字符串 s 的字典序是否在字符 str 的字典序之前
s<str;
//获取长度1
s.size();
//获取长度2
s.length( );
//截取字符串s,从第 pos 个位置开始len 个字符
s.substr(pos,len);
//在字符串s的第 pos 个字符之前插字符串 st
s.insert(pos,str);
//在字符串 s 中从第 pos 个字符开始寻找 str,并返回位置,如果找不到返回-1。pos 可以省略,默认值是 0。
s.find(str,[pos]);
//可以获取带空格字符串
getline(cin,s);