如何实现一定概率选中某一个字母
在C#版看到这一篇文章,手边现在正开著MacBook上网
实在不太想重新开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;
}
上一篇:C语言文件操作函数大全(超详细)
栏 目:C语言
本文标题:如何实现一定概率选中某一个字母
本文地址:https://www.xiuzhanwang.com/a1/Cyuyan/4373.html
您可能感兴趣的文章
- 01-10如何判断一个数是否为2的幂次方?若是,并判断出来是多少次方
- 01-10数据结构课程设计-用栈实现表达式求值的方法详解
- 01-10使用OpenGL实现3D立体显示的程序代码
- 01-10求斐波那契(Fibonacci)数列通项的七种实现方法
- 01-10C语言 解决不用+、-、&#215;、&#247;数字运算符做加法
- 01-10使用C++实现全排列算法的方法详解
- 01-10如何判断一个数是否为4的幂次方?若是,并判断出来是多少次方
- 01-10如何查看进程实际的内存占用情况详解
- 01-10如何寻找数组中的第二大数
- 01-10用C++实现DBSCAN聚类算法
阅读排行
本栏相关
- 04-02c语言函数调用后清空内存 c语言调用
- 04-02func函数+在C语言 func函数在c语言中
- 04-02c语言的正则匹配函数 c语言正则表达
- 04-02c语言用函数写分段 用c语言表示分段
- 04-02c语言中对数函数的表达式 c语言中对
- 04-02c语言编写函数冒泡排序 c语言冒泡排
- 04-02c语言没有round函数 round c语言
- 04-02c语言分段函数怎么求 用c语言求分段
- 04-02C语言中怎么打出三角函数 c语言中怎
- 04-02c语言调用函数求fibo C语言调用函数求
随机阅读
- 04-02jquery与jsp,用jquery
- 01-10delphi制作wav文件的方法
- 01-10使用C语言求解扑克牌的顺子及n个骰子
- 01-11Mac OSX 打开原生自带读写NTFS功能(图文
- 08-05织梦dedecms什么时候用栏目交叉功能?
- 08-05dedecms(织梦)副栏目数量限制代码修改
- 01-11ajax实现页面的局部加载
- 01-10C#中split用法实例总结
- 08-05DEDE织梦data目录下的sessions文件夹有什
- 01-10SublimeText编译C开发环境设置