5
社区成员
发帖
与我相关
我的任务
分享输出全部子序列(空集不用输出为2^n-1个):

代码:
#include<iostream>
using namespace std;
int main(){
const int N=4;
int a[N]={1,2,3,4};
//穷举a的所有子序列
//子串:元素间顺序不变且连续
//序列:元素间顺序不变且不必连续
//子集元素个数为0时的子序列:{}//空集
//子集元素个数为1时的子序列:1\2\3
//子集元素个数为2时的子序列:1,2\1,3\2,3
//集元素个数为3时的子序列:1,2,3
//算上空集,当原序列有m个数时,它的子序列个数为2^m个
for(int n=1;n<=N;n++){
if(n==1){
cout<<"子序列为1个元素时:"<<endl;
for(int i=0;i<N;i++){
cout<<a[i]<<endl;
}
}else if(n==2){
cout<<"子序列为2个元素时:"<<endl;
for(int i=0;i<N-1;i++){
for(int j=i+1;j<N;j++){
cout<<a[i]<<" "<<a[j]<<endl;
}
}
}else if(n==3){
cout<<"子序列为3个元素时:"<<endl;
for(int i=0;i<N-2;i++){
for(int j=i+1;j<N-1;j++){
for(int k=j+1;k<N;k++){
cout<<a[i]<<" "<<a[j]<<" "<<a[k]<<endl;
}
}
}
}else if(n==4){
cout<<"子序列为4个元素时:"<<endl;
for(int i=0;i<N-3;i++){
for(int j=i+1;j<N-2;j++){
for(int k=j+1;k<N-1;k++){
for(int z=k+1;z<N;z++){
cout<<a[i]<<" "<<a[j]<<" "<<a[k]<<" "<<a[z]<<endl;
}
}
}
}
}
//根据此规律可以写出无数个……
}
return 0;
}