如何实现一定概率选中某一个字母

在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;
}

(0)

相关推荐

  • 如何实现一定概率选中某一个字母

    在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>#inclu

  • vue select二级联动第二级默认选中第一个option值的实例

    当二级联动比如选择国家的时候,希望选中一个国家的时候后面城市默认选中第一个城市,则给国家的select加一个@change事件就可以了 <div class="inputLine"> <span>所在区域</span> <select name="" v-model="countryName" @change="selectCountry"> <option :value=

  • jQuery选择器选中最后一个元素,倒数第二个元素操作示例

    本文实例讲述了jQuery选择器选中最后一个元素,倒数第二个元素操作.分享给大家供大家参考,具体如下: HTML部分: <div> <p>元素1</p> <p>元素2</p> <p>元素3</p> <p>元素4</p> <p>元素5</p> </div> 取倒数第二个p元素 $("div p").eq(-2) 取最后一个p元素 $("

  • angularJs使用ng-repeat遍历后选中某一个的方法

    1.html代码如下所示: <div> <button ng-repeat="t in deptName" class="deptDiv" ng-class="{'deptDivOnclick':selected==t.name}" ng-click="showDeptEmps(t.name )">{{ t.name }} </button> </div> 2.angular代码

  • jquery select选中的一个小问题

    jquery使select选中: 用$("#select").attr('value','2');时firefox可以,但ie6不可以 改用$("#select").val('2'),两者都可以了,而且更简洁 自己的理解:value不是select的正规属性,这个value存在于<option>里,所以第一句在兼容上有点问题

  • asp+正则获得字符串中最后一个字母非字母不算

    复制代码 代码如下: Function getLastWord(str) Set regEx = New RegExp regEx.Pattern = "(.*)([a-zA-Z])[^a-zA-Z]*" regEx.IgnoreCase = false regEx.Global = True str = regEx.Replace(str,"$2") getLastWord = str Set reg=nothing End Function str="

  • 推荐一个电信网络工程师讲解禁路由上网的破解方法

    ADSL共享上网有两种方式,一种是代理,一种是地址翻译(NAT),大家常说的路由方式其实就  是NAT方式,其实路由和NAT的原理还是有区别的,这里不作讨论,现在的ADSL猫一般都有NAT的  功能,用它本身的功能实现共享上网是比经济方便,本文主要讨论这种方式.转  要想阻断一台以上的计算机上网必须能发现共享后边的机器是否多于一台,NAT的工作原理如图  一所示,经过NAT转换后访问外网的内网的计算机的地址都变成了192.168.0.1而且MAC地址也转  换成了ADSL的MAC地址,也就是说,

  • Android自定义View实现通讯录字母索引(仿微信通讯录)

    一.效果:我们看到很多软件的通讯录在右侧都有一个字母索引功能,像微信,小米通讯录,QQ,还有美团选择地区等等.这里我截了一张美团选择城市的图片来看看: 我们今天就来实现图片中右侧模块的索引功能,包括触摸显示以选中的索引字母.这里我的UI界面主要是参照微信的界面来实现,所以各位也可以对照微信来看看效果,什么都不说了,只有效果图最具有说服力! 二.分析: 我们看到这样的效果我们心理都回去琢磨,他是如何实现的: 首先,它肯定是通过自定义 View 来实现的,因为 Android 没有提供类似这样的控件

  • Android仿微信联系人列表字母侧滑控件

    仿微信联系人列表字母侧滑控件, 侧滑控件参考了以下博客: Android实现ListView的A-Z字母排序和过滤搜索功能 首先分析一下字母侧滑控件应该如何实现,根据侧滑控件的高度和字母的数量来平均计算每个字母应该占据的高度. 在View的onDraw()方法下绘制每一个字母 protected void onDraw(Canvas canvas) { super.onDraw(canvas); int height = getHeight();// 获取对应高度 int width = get

  • Android仿微信联系人按字母排序

    App只要涉及到联系人的界面,几乎都是按照字母排序以及导航栏的方式.既然这个需求这么火,于是开始学习相关内容,此篇文章是我通过参考网上资料独立编写和总结的,希望多多少少对大家有所帮助,写的不好,还请各位朋友指教. 效果图如下: 实现这个效果,需要三个知识点 : 1:将字符串 进行拼音分类 2:ExpandableListView 二级扩展列表 3:右边字母分类View 我们先一个一个来了解解决方案,再上代码. 实现字母分类: 字母分类又分为三个小要点:一个是将中文转化为拼音,一个是实现按照字母的

随机推荐