输入父集,求出所有子集.
来源:互联网 发布:linux tomcat线程挂起 编辑:程序博客网 时间:2024/06/14 20:08
// 算法设计与分析第一次作业.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
int n;//元素个数,由用户输入
int N[10];//元素内容,由用户输入
int static C[10];//用于存储子集,每次只存一个,输出一个子集后清空以便存下一个
int L;//总层次,即所求子集中元素的个数
void Out(int Initial,int Layer);//输出函数,其中Initial:由当前元素作为初始元素求父集的子集; Layer:所求子集元素的个数;
/*
例:
假设父集为(1,2,3,4,5),则Out(2,2)的结果为:23,24,25
假设父集为(1,2,3,4,5),则Out(2,3)的结果为:234,235,245
依次类推,则调用Out(0,1),Out(0,2)......的过程中不断调用Out(Initial+1,Layer-1)递归时程序运行结果为:
1
2
3
4
5
12
13
14
15
23
.
.
.
*/
int main()
{
/*初始化程序*/
for (int i = 0; i < 10; i++)
{
C[i] = 0;
}
/*输入元素个数*/
do
{
cout << "请输入元素个数(不超过10个):" << endl;
cin >> n;
if (n > 10)
{
cout << "出现错误:元素个数超出范围." << endl;
}
} while (n > 10);
/*输入元素内容*/
cout << "请输入所有元素(不相同):" << endl;
for (int i = 0; i < n; i++)
{
cin >> N[i];
}
/*输出结果*/
cout << "子集为:" << endl;
cout << "Φ" << endl;//输出空集
for (L = 1; L <= n; L++)//求元素个数分别从1到n的子集
{
Out(0, L);
}
return 0;
}
void Out(int Initial,int Layer)
{
int initial=Initial;//输出时的初始值
int layer=Layer;//输出时的层次
if (layer > 0 && n-initial>=layer)//元素个数必须大于0
{
for (int i = initial; i < n; i++)
{
if (n - i >= layer)//父集中剩余元素个数必须大于所求子集中元素的个数
{
C[layer-1] = N[i];//以层次(元素个数)为联系反方向存结果,例如所求子集为123,则C[]中数据为321
Out(i + 1, layer - 1);//递归
}
}
}
else
{
int i = L-1;
do
{
cout << C[i];
i--;
} while ( i >= 0 );//反方向输出所求的一个子集
cout << endl;
return;
}
}
//
#include "stdafx.h"
#include <iostream>
using namespace std;
int n;//元素个数,由用户输入
int N[10];//元素内容,由用户输入
int static C[10];//用于存储子集,每次只存一个,输出一个子集后清空以便存下一个
int L;//总层次,即所求子集中元素的个数
void Out(int Initial,int Layer);//输出函数,其中Initial:由当前元素作为初始元素求父集的子集; Layer:所求子集元素的个数;
/*
例:
假设父集为(1,2,3,4,5),则Out(2,2)的结果为:23,24,25
假设父集为(1,2,3,4,5),则Out(2,3)的结果为:234,235,245
依次类推,则调用Out(0,1),Out(0,2)......的过程中不断调用Out(Initial+1,Layer-1)递归时程序运行结果为:
1
2
3
4
5
12
13
14
15
23
.
.
.
*/
int main()
{
/*初始化程序*/
for (int i = 0; i < 10; i++)
{
C[i] = 0;
}
/*输入元素个数*/
do
{
cout << "请输入元素个数(不超过10个):" << endl;
cin >> n;
if (n > 10)
{
cout << "出现错误:元素个数超出范围." << endl;
}
} while (n > 10);
/*输入元素内容*/
cout << "请输入所有元素(不相同):" << endl;
for (int i = 0; i < n; i++)
{
cin >> N[i];
}
/*输出结果*/
cout << "子集为:" << endl;
cout << "Φ" << endl;//输出空集
for (L = 1; L <= n; L++)//求元素个数分别从1到n的子集
{
Out(0, L);
}
return 0;
}
void Out(int Initial,int Layer)
{
int initial=Initial;//输出时的初始值
int layer=Layer;//输出时的层次
if (layer > 0 && n-initial>=layer)//元素个数必须大于0
{
for (int i = initial; i < n; i++)
{
if (n - i >= layer)//父集中剩余元素个数必须大于所求子集中元素的个数
{
C[layer-1] = N[i];//以层次(元素个数)为联系反方向存结果,例如所求子集为123,则C[]中数据为321
Out(i + 1, layer - 1);//递归
}
}
}
else
{
int i = L-1;
do
{
cout << C[i];
i--;
} while ( i >= 0 );//反方向输出所求的一个子集
cout << endl;
return;
}
}
0 0
- 输入父集,求出所有子集.
- 回朔+ STL求出并输出所有子集
- 使用递归求出一个集合的所有子集
- 所有子集
- 输入一个整数,求出它的所有因子
- 输入一个整数,求出它的所有因子
- 输入一个集合,输出这个集合的所有子集
- 求出数组的最大子集,并求和
- 求出所有哈密尔顿图
- 求出所有组合
- 遍历所有子集
- 列出所有子集
- 枚举集合所有子集。
- 所有子集的和
- 求出输入任意整数的所有质数,两个数的最大公约数
- 输入一个正整数N,要求求出它的所有加法分解式
- 输入一个正整数N,要求求出它的所有乘法分解式
- 根据父级名称找出所有子集的SQL语句
- jQuery布局插件UI Layout简介及使用方法
- ROS常用命令
- C++避免分配多个小内存
- mapper配置文件中非空判断的重要性
- C++ Tips
- 输入父集,求出所有子集.
- 使用蚁群算法(ACO)、遗传算法(GA)、霍普菲尔德网络(Hopfield)解决旅行商问题(TSP)
- 探索并发编程(五)------Java多线程开发技巧
- 【工具】Source Insight中文注释间隔过大的解决办法
- 并查集模板
- spark工作机制
- jenkins windows下挪动工作目录
- IDEA开发时,控制台输出中文乱码解决方法
- 关于Dword、LPSTR、LPWSTR、LPCSTR、LPCWSTR、LPTSTR、LPCTSTR