每日一小练——按字典顺序列出全部子集

上得厅堂,下得厨房,写得代码,翻得围墙,欢迎来到睿不可挡的每日一小练!


题目:按字典顺序列出全部子集


内容:

请写一个程序用字典顺序把一个{1,2,3,4,...,n}集合的全部子集找出来。


解答:

想必我就不用解释什么是字典顺序了,作为乘虚猿和攻城狮大家应该懂得,无论你懂不懂,反正我懂了!

事实上我们能够先列出一个实例,观察规律:

比如n=3

{1}

{1,2}

{1,2,3}

{1,3}

{2}

{2,3}

{3}

能够看出这种规律(假设你说我怎么没看出来,事实上你能够再多看一会!)

令一个指针指向第一个元素,假设指针指向的元素小于n就使指针加一,后指针指向元素等于指针指向前一个元素加一。当指针指向元素等于n时,指针回指一位即指针减一,指针指向元素加以,当指针指向位置为初始位置时,指向元素等于n则输出结束了。

事实上这个规律也不是观察实例得出的,这就是我们在按字典排序时做的事情,仅仅只是人的大脑速度太快,非常多过程一步到位而已,假设不信,你拿出一本字典慢慢尝试看看是不是这种!


我的解法:上来没多想,打开vs2013就敲了起来,问题果然非常easy,分分钟就超神。。奥,不正确就攻克了!


#include <iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	void subsetInDic(int n);
	int n;
	cout << "请输入一个n:";
	cin >> n;
	cout << endl;
	cout << "求出子集按字典顺序排列的结果为:" << endl;
	subsetInDic(n);
	getchar();
	getchar();
	return 0;
}

void subsetInDic(int n)
{
	int i,j,set_Index = 0;
	int subsetNum[1000];
	subsetNum[set_Index] = 1;
	cout << "{ }" << endl;
	while (true)
	{
		cout << "{ ";
		for (i = 0; i <= set_Index; i++)
			cout << subsetNum[i] << " ";
		cout << "}";
		cout << endl;
		if (subsetNum[set_Index] < n)
		{
			subsetNum[set_Index + 1] = subsetNum[set_Index] + 1;
			set_Index++;
		}
		else if (set_Index != 0)
			subsetNum[--set_Index] += 1;
		else
			break;
	}
}


实验结果:




最后感谢 @hikean 同学在  《列出全部子集》中给给出的更简便,效率更快的方法。欢迎大家能给出更好的方法!


欢迎大家添�每日一小练,嘿嘿!

每天练一练,日久见功夫,加油!


            -End-

參考文献:《c语言名题精选百则》




转载于:https://www.cnblogs.com/hrhguanli/p/3774800.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以按照以下步骤从MNIST训集中按照现有顺序分出六个万份数据: 1. 从MNIST数据集中加载训数据。MNIST数据集通常以numpy数组的形式提供。 2. 将数据划分为6个均等大小的子集。你可以使用numpy的split方法来将数据划分为均等大小的子集。 3. 确定每个子集顺序。根据你的需求,你可以按照数据集中样本的顺序来确定子集顺序,或者你可以随机确定子集顺序。 4. 将每个子集保存到文件中,以便以后使用。你可以使用numpy的save方法将每个子集保存为numpy数组文件。 下面是一个示例代码,演示了如何从MNIST训集中按照现有顺序分出六个万份数据: ```python import numpy as np from sklearn.utils import shuffle # Load MNIST training data train_data = np.load('mnist_train_data.npy') train_labels = np.load('mnist_train_labels.npy') # Split data into 6 equal subsets train_data_split = np.array_split(train_data, 6) train_labels_split = np.array_split(train_labels, 6) # Define the order of each subset subset_order = [0, 1, 2, 3, 4, 5] # Example ordering # Shuffle the order of the subsets (optional) subset_order = shuffle(subset_order) # Save each subset to file for i in range(6): np.save('mnist_train_subset_{}.npy'.format(subset_order[i]), train_data_split[i]) np.save('mnist_train_labels_subset_{}.npy'.format(subset_order[i]), train_labels_split[i]) ``` 在这个示例代码中,我们首先加载了MNIST训数据,然后使用numpy的array_split方法将数据划分为6个均等大小的子集。我们还定义了每个子集顺序,然后使用sklearn.utils的shuffle方法将子集顺序打乱(这是可选的)。最后,我们使用numpy的save方法将每个子集保存到文件中。你可以根据你的需求修改这个示例代码,例如改变子集的数量或顺序,或者修改保存子集的文件名。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值