c++学习笔记
Posted ~晚风微凉~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++学习笔记相关的知识,希望对你有一定的参考价值。
1.for(auto i:v)
这是c++11的新特性,范围for,相当于java的for each。v是一个可遍历的容器或流,比如vector类型,i就用来在遍历过程中获得容器里的每一个元素。
例如:vector v={1,2,3,4};
for(auto i:v)
cout<<i;
结果就是1234
2.while(~scanf("%d", &n))
scanf的返回值是输入值的个数
如果没有输入值就是返回-1
-1按位取反结果是0
while(~scanf("%d", &n))就是当没有输入的时候退出循环
3.费马小定理,快速幂?????
4.对109+7取模(在此之前有点让人头疼,这啥玩意儿,用%做不到,会变double型)
不能用#define mod 1e9+7*,因为这个在后面编译就出错了,
例如:
error: invalid operands of types ‘long long int’ and ‘double’ to binary ‘operator%’|,它把mod居然看成了double型的数据
正确的:const long long mod=1e9+7;
同时附上 typedef long long ll;//typedef给复杂的数据类型起别名
const ll mod=1e9+7;定义常量
设正整数x,y,p,求余符号为⊙。
对于加法运算:(x+y)⊙p = (x⊙p+y⊙p)⊙p
对于乘法运算:(xy)⊙p = [(x⊙p)(y⊙p)]⊙p
4.正多边形里无限次循环取正多边形,每次从每条边的重点开始取下一顶点。求所有边之和 数学
(绝绝子的数学推导,真是要好好学习数学啊)
例题:图案的框架最初是一个正n边形,之后以它的n条边的中点为顶点构成一个新的正n变形。如此重复多次后,就能得到天花板图案的框架了。
不要问重复多少次,问就是无限重复。。。
思路: 我们知道的只有边长和角度,考虑去用三角函数,同时因为每次都是正n边形,所以角度是没有变化的,可以考虑把边长用三角函数的角度去表示。
设a为刚开始时正多边形的边长,内角大小为b,则可数学推出,下一个正多边形的边长为asin(b/2);下下个的边长为(asin(b/2))*sin(b/2);每次就是在上一条的基础上乘以那个相同的角度的正弦值,这么看还可以推导成等比数列求和(确实,上机运行过,只要把pow函数里的指数弄大点,时间也只要3ms(又想到了快速幂运算)
5.const double pi=acos(-1)对于精度要求高的题目很好使
以上是关于c++学习笔记的主要内容,如果未能解决你的问题,请参考以下文章