暴力穷举法-输出全部子序列(2^n个)

代码骑士
优质创作者: 游戏开发技术领域
2023-01-16 20:38:14

输出全部子序列(空集不用输出为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;
} 

 

...全文
281 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

5

社区成员

发帖
与我相关
我的任务
社区描述
考研408:数据结构、计算机组成原理、操作系统、计算机网络
学习方法考研面试 其他
社区管理员
  • 代码骑士
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧