Java
public static void main(String[] args) {
int[] a = {1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20};
for(int i = 0; i < (1<<a.length); i++) {
String str = Integer.toBinaryString(i);
int num = 0;
for(int j=0; j<str.length(); j++) {
if(str.charAt(j) == '1') {
num++;
}
}
System.out.println( i + "中1的个数" + num);
for(int j = 0; j < a.length; j++)
if((i&(1<<j))>=1)
System.out.print(j + " ");
}
}
C++
#include<bits/stdc++.h>
using namespace std;
int main() {
int a[20] = {1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20};
for(int i = 0; i < (1<<20); i++) {
int num = __builtin_popcount(i);
printf("%d\n", num);
for(int j = 0; j < 20; j++)
if((i&(1<<j))>=1)
printf("%d ", j);
}
return 0;
}
备注
- i<<j,表示 i * 2j
- i>>j,表示 i / 2j