永发信息网

c++ 求写程序 集合 骰子 急!

答案:1  悬赏:20  手机版
解决时间 2021-12-01 21:57
  • 提问者网友:火车头
  • 2021-12-01 07:55
c++ 求写程序 集合 骰子 急!
最佳答案
  • 五星知识达人网友:天凉才是好个秋
  • 2021-12-01 08:37
根据题主要求写的,题主可运行看,不懂追问

#include
#include
#include
#include
#include


const int DICE_MAX_NUM = 6;

class Dice
{
public:
Dice(){};
// 掷骰子
int Shake()
{
diceNum=rand()%DICE_MAX_NUM+1;
return diceNum;
}
int GetDiceNum() { return diceNum;}
private:
int diceNum;
};

// 一次骰子样本
typedef struct tagSample
{
int oneDiceNum;
int anthorDiceNum;
}Sample;

// 获取交集
void GetIntersection(const std::vector &s1,const std::vector &s2,std::vector &sdest)
{
std::vector::const_iterator iter1 = s1.begin();
std::vector::const_iterator iter2 = s2.begin();

for (;iter1 != s1.end();++iter1)
{
iter2 = s2.begin();
for (;iter2 != s2.end();++iter2)
{
// 若相等的就是要放入交集了
if (iter1->anthorDiceNum == iter2->anthorDiceNum
&& iter1->oneDiceNum == iter2->oneDiceNum)
{
sdest.push_back(*iter1);
break;
}
}
}
// 还要排除下交集中有重复的,用到了map的键值不重复性质,骰子的两个点数根据顺序可以作为key
std::map tmpMap;
std::vector::const_iterator iterI = sdest.begin();
for (;iterI != sdest.end();++iterI)
{
tmpMap.insert(std::pair(iterI->oneDiceNum*100+iterI->anthorDiceNum,(*iterI)));
}
sdest.clear();
std::map::iterator iterMap = tmpMap.begin();
for (;iterMap != tmpMap.end();++iterMap)
{
sdest.push_back(iterMap->second);
}
}

void GetUnion(const std::vector &s1,const std::vector &s2,std::vector &sdest)
{
std::vector::const_iterator iter1 = s1.begin();
std::vector::const_iterator iter2 = s2.begin();

// 把两个列队的数据都放到集合dest中,再排除重复达到并集效果
for (;iter1 != s1.end();++iter1)
{
sdest.push_back(*iter1);
}
for (;iter2 != s2.end();++iter2)
{
sdest.push_back(*iter2);
}

// 还要排除下并集中有重复的,用到了map的键值不重复性质,骰子的两个点数根据顺序可以作为key
std::map tmpMap;
std::vector::const_iterator iterI = sdest.begin();
for (;iterI != sdest.end();++iterI)
{
tmpMap.insert(std::pair(iterI->oneDiceNum*100+iterI->anthorDiceNum,(*iterI)));
}
sdest.clear();
std::map::iterator iterMap = tmpMap.begin();
for (;iterMap != tmpMap.end();++iterMap)
{
sdest.push_back(iterMap->second);
}
}

void Print(const std::vector& vecS)
{
std::cout<<"----------------cut--line----------------"< std::vector::const_iterator iterS = vecS.begin();
for (;iterS != vecS.end();++iterS)
{
std::cout<<"first = "<oneDiceNum
<<",second = "<anthorDiceNum< }
std::cout<<"----------------cut--line----------------"<}

int main()
{
srand(time(NULL));

const int scSize = 10;
std::vector sa;
std::vector sb;
std::vector sc(scSize);
std::vector sd;

Dice firstDice;
Dice secondDice;

// 生成36个样本
const int sampleCount = 36;
std::vector sample(sampleCount);
for (int i=0; i {
sample[i].oneDiceNum = firstDice.Shake();
sample[i].anthorDiceNum = secondDice.Shake();
}
// 生成sc的十个样本
for (int j=0; j {
sc[j].oneDiceNum = firstDice.Shake();
sc[j].anthorDiceNum = secondDice.Shake();
}

// 样本分类,分到A,B中
std::vector::iterator iterS = sample.begin();
for (;iterS != sample.end();++iterS)
{
// 和为偶数
if ((iterS->oneDiceNum + iterS->anthorDiceNum)%2 == 0)
{
sa.push_back(*iterS);
}
// 和为奇数
else
{
sb.push_back(*iterS);
}
}
// 求交集并打印
GetIntersection(sa,sc,sd);
Print(sd);

sd.clear();

// 求并集并打印
GetUnion(sb,sc,sd);
Print(sd);
return 0;
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯