while(~scanf("%d", &n)&&n)的含义
-
scanf的返回值是输入值的个数,如果没有输入值则返回-1
-
~是按位取反
~scanf("%d", &n) 如果没有返回值,对于-1按位求反得到0
所以如果没有输入则退出循环
- && 相当于and
即,当输入不为空,而且不为0,进入循环
- while(1)无限循环,python 和c在布尔类型上相通
*https://github.com/liuchuo*
^运算符
- ^运算
位异或运算符 ^
1^1=0 0^0=0
0^1=1 1^0=1
所以,a=a^b
^运算性质:
n ^ m ^ m = n
找一个 数字—出现奇数次 ,(异或运算入门) ,如果a、b两个值不相同,则异或结果为1
递推与递归的区别
递归:
一种通过重复将问题分解为同类的子问题而解决问题的方法。(函数自己调用自己)
从未知到已知
递推:
用若干步可重复运算来描述复杂问题的方法。通常是通过计算前面的一些项来得出序列中的指定项的值。(重复进行一个过程)
从已知到未知
求解递推思路
往往递推是需要求出一个关系式,一个数列的下一项是由它前面几项运算得到的( 如F(n)=F(n-1)+F(n-2) )
思考方式:求第n个方案的时候,0~n-1的方案都是已知的
1、将第n个元素加进去,看对整个方案的影响,推出关系式
2、当然,也可以通过数学归纳法(即找规律)推出关系式
memset 和sizeof用法
常见用法 memset(a,0,sizeof(a))
原型:extern void *memset(void *buffer, int c, int count);
头文件:#include <string.h>
功能:把buffer所指内存区域的前count个字节设置成字符c
c++中sort函数
头文件:#include
格式:sort( first , last ,comp );
(1)第一个参数first:是要排序的数组的起始地址。
(2)第二个参数last:是结束的地址(最后一个数据的后一个数据的地址)
(3)第三个参数comp是排序的方法:可以是从升序也可是降序。如果第三个参数不写,则默认的排序方法是从小到大排序。
//如果要从大到小,自定义函数cmp
bool cmp(int a, int b)
{
return a>b;
}
对于容器,容器中的数据类型可以多样化 :
转载:https://www.cnblogs.com/junbaobei/p/10776066.html
queue
/*
back()返回最后一个元素
empty()如果队列空返回true
front()返回队首元素
pop()删除队首元素
push()在末尾加入一个元素
size()返回队列中元素的个数
*/
//插入元素
q1.push(1);
//返回队列大小,即队列中元素的个数
int len=q1.size();
cout<<len<<endl;
//返回队首元素(第一个插入的元素(不删除,只访问))
int a=q1.front();
cout<<q1.front()<<endl;
//返回队尾元素(最后一个插入的元素(不删除,只访问))
int b=q1.back();
cout<<b<<endl;
//遍历队列,不能用for循环,没有对应的迭代器,只能边删除边访问
while(!q1.empty())//判断队列是否为空
q1.pop();//只删除队首元素,没有返回值