while(~scanf("%d",&n)){ }
这个while循环里面的语句代表当输入为空或者读取到最后一个值时停止循环,~代表按位取反
const和指针的三种经典组合:
const int *p---------指向常量的指针
char *const p='a'---常指针
const char *const p='a'-----指向常量的常指针
<<左移
<<右移
+的优先级比=<<高
rand() 和 srand() 的关系
因为rand的内部实现是用线性同余法做的,他不是真的随机数,只不过是因为其周期特别长,所以有一定的范围里可看成是随机的,rand()会返回一随机数值,范围在0至
RAND_MAX
间。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。rand ()产生的是假随机数字,每次执行时是相同的。若要不同,以不同的值来初始化它.初始化的函数就是srand()。
freopen("data.in", "r", stdin) 含义是以读的方式打开一个名为data.in的文件,相当于替换了scanf需要键盘录入的过程,这个语句直接读取data.in文件中的内容(作为输入)
在visual stdio2017中用到freopen时会报错,是因为不安全性,改为freopen_s后可以用,但是又有新问题出现,freopen_s不接受三个参数,这时可以把freopen_s改为fopen_s就可以了。