如何實現(xiàn)一定概率選中某一個字母
更新時間:2013年05月31日 10:21:10 作者:
本篇文章是對如何實現(xiàn)一定概率選中某一個字母的解決方法進行了詳細的分析介紹,需要的朋友參考下
在C#版看到這一篇文章,手邊現(xiàn)在正開著MacBook上網(wǎng)
實在不太想重新開Windows跟Visual Studio來編碼
正好我也在練習C++ Template,那就很剛好試著用Template來實踐一下
//
// main.cpp
// RandomTest
//
// Created by Cloud on 2011/4/10.
// Copyright 2011年 Orz. All rights reserved.
//
#include <iostream>
#include <vector>
using namespace std;
template<class T>
class RandomWord
{
T m_Word;
int m_Probability;
public:
RandomWord(T word, int probability):m_Word(word),m_Probability(probability){}
T getWord() { return m_Word; }
int getProbability() { return m_Probability; }
};
template<class T>
class RandManager
{
vector<RandomWord<T> > m_randomList;
int m_sumOfProbability;
public:
RandManager() :m_randomList(), m_sumOfProbability(0)
{
}
void AddRandomWord(RandomWord<T> word)
{
if(m_sumOfProbability <= 100)
m_randomList.push_back(word);
cout<<"Add word:"<<word.getWord()<<endl;
cout<<"Probability:"<<m_sumOfProbability;
cout<<"-"<<word.getProbability() + m_sumOfProbability<<endl;
m_sumOfProbability += word.getProbability();
}
void RandomGenerate(int randNum)
{
cout<<"Random:"<<randNum<<endl;
int sum = 0;
for(int i = 0 ; i < m_randomList.size() ; i++)
{
RandomWord<T> orz = m_randomList[i];
if( (sum <= randNum) && (randNum < (orz.getProbability() + sum)))
{
cout<<"Generate:"<<orz.getWord()<<endl;
break;
}
else
{
sum += orz.getProbability();
}
}
}
};
int main (int argc, const char * argv[])
{
RandManager<char> manager;
manager.AddRandomWord(RandomWord<char>('A',10));
manager.AddRandomWord(RandomWord<char>('B',10));
manager.AddRandomWord(RandomWord<char>('C',35));
manager.AddRandomWord(RandomWord<char>('D',25));
manager.AddRandomWord(RandomWord<char>('E',20));
srand(time(NULL));
manager.RandomGenerate(rand()%100);
return 0;
}
實在不太想重新開Windows跟Visual Studio來編碼
正好我也在練習C++ Template,那就很剛好試著用Template來實踐一下
復制代碼 代碼如下:
//
// main.cpp
// RandomTest
//
// Created by Cloud on 2011/4/10.
// Copyright 2011年 Orz. All rights reserved.
//
#include <iostream>
#include <vector>
using namespace std;
template<class T>
class RandomWord
{
T m_Word;
int m_Probability;
public:
RandomWord(T word, int probability):m_Word(word),m_Probability(probability){}
T getWord() { return m_Word; }
int getProbability() { return m_Probability; }
};
template<class T>
class RandManager
{
vector<RandomWord<T> > m_randomList;
int m_sumOfProbability;
public:
RandManager() :m_randomList(), m_sumOfProbability(0)
{
}
void AddRandomWord(RandomWord<T> word)
{
if(m_sumOfProbability <= 100)
m_randomList.push_back(word);
cout<<"Add word:"<<word.getWord()<<endl;
cout<<"Probability:"<<m_sumOfProbability;
cout<<"-"<<word.getProbability() + m_sumOfProbability<<endl;
m_sumOfProbability += word.getProbability();
}
void RandomGenerate(int randNum)
{
cout<<"Random:"<<randNum<<endl;
int sum = 0;
for(int i = 0 ; i < m_randomList.size() ; i++)
{
RandomWord<T> orz = m_randomList[i];
if( (sum <= randNum) && (randNum < (orz.getProbability() + sum)))
{
cout<<"Generate:"<<orz.getWord()<<endl;
break;
}
else
{
sum += orz.getProbability();
}
}
}
};
int main (int argc, const char * argv[])
{
RandManager<char> manager;
manager.AddRandomWord(RandomWord<char>('A',10));
manager.AddRandomWord(RandomWord<char>('B',10));
manager.AddRandomWord(RandomWord<char>('C',35));
manager.AddRandomWord(RandomWord<char>('D',25));
manager.AddRandomWord(RandomWord<char>('E',20));
srand(time(NULL));
manager.RandomGenerate(rand()%100);
return 0;
}
相關文章
用VC++6.0的控制臺實現(xiàn)2048小游戲的程序
本文是作者拜讀劉地同學的《C語言控制臺版2048》之后感覺非常不錯,添加了注釋之后分享給大家的,方便更多的初學者閱讀學習,有需要的小伙伴參考下。2015-03-03