求n个数据的组合:
由数学知识,可以知道一共有2n个子集
用二进制进行对照会非常直观
子集 | 空集 | a1 | a0 | a1 , a0 | a2 | a2, a0 | a2, a1 | a0,a1, a2 |
---|---|---|---|---|---|---|---|---|
二进制数 | 0 0 0 | 0 1 0 | 0 0 1 | 0 1 1 | 1 0 0 | 1 0 1 | 1 1 0 | 1 1 1 |
给出n个数据,问从这n个数据中取出3个组成三角形,有多少种取法?
经典的组合问题
下面上代码
while(kk){
kk = kk & (kk - 1);//利用&消除1
counted++;
}//统计1的个数
例如:1011&(1011-1)=1010
1010&(1010-1)=1010&1001=1000
....
完整代码
#include<bits/stdc++.h>//万能头文件
using namespace std;
int sd[100001]; // 定义一个储存边的数组
int jmt[3];//储存数组
bool judge(int* a)//判断函数
{
if( (a[0]+a[1]>a[2]) && (a[1] + a[2]> a[0]) && (a[2] + a[0] > a[1]))
return true;
return false;
}
int main()
{
int n;int num = 0;
scanf("%d",&n);
for(int i = 0 ; i < n ; i++){
scanf("%d",&sd[i]<