给定集合,求异或和为0的最小子集。
时间复杂度越小越好,谢谢!
#include <iostream>
#include <vector>
#include <unordered_set>
using namespace std;
vector<int> findMinSubsetWithXORZero(vector<int>& nums) {
int n = nums.size();
vector<int> result;
unordered_set<int> subset;
// 遍历集合中的每个元素
for (int i = 0; i < n; i++) {
unordered_set<int> newSubset;
newSubset.insert(nums[i]);
// 将当前元素与结果集合中的每个子集进行异或操作,并加入到新的子集中
for (int num : subset) {
newSubset.insert(num ^ nums[i]);
}
// 更新结果集合
for (int num : newSubset) {
subset.insert(num);
}
}
// 遍历结果集合,找出异或和为0的最小子集
for (int num : subset) {
if (num == 0) {
result.push_back(num);
return result;
}
}
return result;
}
int main() {
vector<int> nums = {1, 2, 3, 4, 5};
vector<int> minSubset = findMinSubsetWithXORZero(nums);
if (minSubset.empty()) {
cout << "No subset with XOR zero found" << endl;
} else {
cout << "Subset with XOR zero: ";
for (int num : minSubset) {
cout << num << " ";
}
cout << endl;
}
return 0;
}
推箱子是我们小时候经常会玩的很简单的小游戏,在小神机的年代里,推箱子小游戏非常风靡,对于已经掌握了一定编程知识的你,简单地模仿这个游戏进行创作一定不是难事,那么我们现在尝试去制作它吧!
编程语言:C++
图形库:graphics.h
(图形库的安装教程参考:Visual Studio C++/C 教你四步安装graphics图形库)
一、前期分析
空地、箱子、墙壁、人、箱子要到达的终点,玩家起点
1.人走到空地上
2.人推到了箱子
3.人走到终点
4.人推着箱子一起移动=人推箱子都走到空地上+人推箱子撞到墙+人推箱子到终点
5.人撞墙
1.推箱子地图设计
2.人物移动设计(按键键入)
3.关卡设计(完成后进入下一关)
二、地图设计
首先,我们需要将不同的角色用不同的数字代表,然后通过二维数组,来构建地图,就像这样:
1,1,1,1,1,1,1,1,
1,3,4,0,0,4,3,1,
1,0,1,0,0,1,0,1,
1,0,0,0,0,0,0,1,
1,0,1,5,0,1,0,1,
1,3,4,0,0,4,3,1,
1,1,1,1,1,1,1,1,
然后我们设计多个关卡,构成一个三维数组,接着我们对以上分析的几个游戏角色进行贴图,将图片导入。
三、人物移动设计
我们通过键入方向键来操纵人物的移动,并对人物移动所产生的不同的游戏状态,写出相应的代码。
即:对键入按键处理
判断:只有人可移动—>寻找人—>=5
判断:怎么移动?
数组操作:需要按键,上下左右
键入成功输出不同结果:不同方位按键进行不同的处理,遍历数组打印地图
四、是否进入下一关卡或者是否游戏结束
人物移动后,判断我们的箱子是不是都到达了终点,然后判断是否已经是最后一个关卡。
游戏完成后弹出自己设计的界面。
(我的是漂亮小姐姐嘿嘿嘿~)
这里放上我的人物角色图片:
这里其实是有一块白色的地面但是你们看不见,我恨!
好的现在我放上我的源码,但是你们要注意更改其中的图片文件的位置,还有你们要放入的文件名字哦!
给你们看看我的文件名: