C(n,k) = C(n-1,k) + C(n-1,k-1) 一个n元集合,选择k个元素的组合有C(n,k)个。 现在把其中一个元素设置为特别元素。 从剩余的n-1个元素中选择k个元素,有C(n-1,k)个,它比C(n,k)所少的都是包含特别元素的组合。 再看C(n-1,k-1),如果把每个组合都加上一个特别元素,那么这个式子就表示所有包含特别元素的k组合。 数组作为函数的参数: 定义数组:int num[3] = {1,2,3}; 声明函数:void Bubble(int num[],int); 定义函数:void Bubble(int num[],int n) 使用:Bubble(num,3); //数组名用为实参 求出int类型的一系列数(a[10])中的最大和最小值: int max=-32768,min=32767;//先假设当前max为int类型的最小值,min为int类型的最大值 for(int i=0;i<=9;i++) { if(a[i]>max) max=a[i]; if(a[i]<min) min=a[i]; } 乘积的最后三位的值只与乘数和被乘数的后三位有关。 一个整数若含有一个因子5,则必然会在求100!时产生一个零。 for(int a=1;a>=3&&a<=4;a++) { cout<<a<<endl; } 结果是不会输出任何数(只要不满足条件就跳出循环) 判断一个数是否为整数: z==int(z) setprecision:控制输出流显示浮点数的数字个数,如果和fixed合用的话,可以控制小数点右面的位数。 cout<<setprecision(2)<<123.456; 1.2e+002 cout<<setprecision(3)<<123.456; 123(输出3位有效数字) cout<<fixed<<setprecision(3)<<123.456 123.456(输出到小数点后3位) cout<<setprecision(4)<<123.456; 123.5(四舍五入) C++引用: 引用的概念:引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。 引用的声明方法:类型标识符 &引用名=目标变量名; int a,&ra=a; a为目标原名称,ra为目标引用名。给ra赋值:ra=1; 等价于 a=1; 说明: (1)&在此不是求地址运算,而是起标识作用。 (2)类型标识符是指目标变量的类型。 (3)声明引用时,必须同时对其进行初始化。 (4)引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,且不能再把该引用名作为其他变量名的别名。 (5)声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。故:对引用求地址,就是对目标变量求地址。&ra与&a相等。 (6)不能建立引用的数组。因为数组是一个由若干个元素所组成的集合,所以无法建立一个由引用组成的集合。但是可以建立数组的引用。 引用的两个主要用途:作为函数参数以及从函数中返回左值。 1、传递可变参数 传统的c中,函数在调用时参数是通过值来传递的,这就是说函数的参数不具备返回值的能力。所以在传统的c中,如果需要函数的参数具有返回值的能力,往往是通过指针来实现的。比如,实现两整数变量值交换的c程序如下: void swapint(int *a,int *b) { int temp; temp=*a; *a=*b; *b=temp; } 使用引用机制后,以上程序的c++版本为: void swapint(int &a,int &b) { int temp; temp=a; a=b; b=temp; } 调用该函数的c++方法为:swapint(x,y); c++自动把x,y的地址作为参数传递给swapint函数。 2、给函数传递大型对象 当大型对象被传递给函数时,使用引用参数可使参数传递效率得到提高,因为引用并不产生对象的副本,也就是参数传递时,对象无须复制。 3、引用返回值 #include <iostream> using namespace std; int& fun(int& a) { a++; return a; } //把a返回引用函数,也就是说这个fun()就是a的别名 int main() { int b=10; fun(b); //同理,fun(b)就是b自增后的b的别名 fun(b)=15;//引用返回值可以作为左值 cout<<b<<endl;//b=15 return 0; } #include <iostream> using namespace std; int& fun(int a)//去掉& { a++; return a; } int main() { int b=10; fun(b); fun(b)=15;//warning C4172: returning address of local variable or temporary cout<<b<<endl; //b=10 return 0; } #include <iostream> using namespace std; int fun(int& a)//去掉& { a++; return a; } int main() { int b=10; fun(b); fun(b)=15;//error C2106: '=' : left operand must be l-value cout<<b<<endl; return 0; } 4、常引用 常引用声明方式:const 类型标识符&引用名=目标变量名; 用这种方式声明的引用,不能通过引用对目标变量的值进行修改,从而使引用的目标成为const,达到了引用的安全性。 【例】: int a ; const int &ra=a; ra=1; //错误 a=1; //正确 引用型参数应该在能被定义为const的情况下,尽量定义为const 。 回文数: "回文数"是一种正读倒读相同的数字。(如:1,2,3,4,5,6,7,8,9,11,22,33,44,55,66,77,88,99) #include<iostream> using namespace std; int main() { long m,temp,n=0; cin>>m; temp=m; while(temp) { n=n*10+temp%10; temp=temp/10; } if(n==m) cout<<"Yes"<<endl; else cout<<"No"<<endl; return 0; }
如果超越了整形变量的限制,其值将为范围的另一端。
#include<iostream> using namespace std; int main() { unsigned int a=0; cout<<a-1<<endl; long long b=1; for(int i=0;i<32;++i) b*=2; cout<<b-1<<endl; return 0; }
#include<iostream> using namespace std; int main() { int a=100; cout<<oct; //以八进制(octal)方式显示(第一位为0,第二位为1到7) cout<<a<<endl; cout<<dec; //以十进制(decimal)方式显示(第一位为1到9) cout<<a<<endl; cout<<hex; //以十六进制(hexadecimal)方式显示(前两位为0x或0X) cout<<a<<endl; return 0; } //诸如cout<<oct;只是修改cout显示整数的方式(整个程序中的显示方式,而不是临近的下一个)(默认是以十进制方式显示) //C++中只有输出八进制、十进制、十六进制的控制格式,没有二进制(binary)的。