有1000个人名 点击按钮后从中抽出一个人名显示出来,每个人都有各自的出现几率(几率存放在数据库里,可以动态调整),请问怎么实现呀。
请高手不吝赐教。

解决方案 »

  1.   

    甲,50%
    乙,40%
    丙,50%
    丁,80%则 total:= 50+40+50+80;
    Randomize;
    r:= Random(total);
    根据r的大小就可以判断了
      

  2.   

    如id         比例         起始数   中止数
       1         10                           
       2         20
       3         30
    1的起始数是0 ,中止数是起始数0+1的比例/1000*总人数
    2的起始数是1的中止数 ,中止数是起始数+2的比例/1000*总人数
    .....
    r:= Random(总数);
    如果起始数<=r<=中止数,显示该人
       缺陷:修改参数时候,要计算起始数   中止数
      

  3.   

    现在的显示分辨率是越来越高了,以至于是多少都搞不清楚,程序也往往需要知道分辨率才能合理安排窗体,所以要得到显示分辨率,下列的程序帮你忙:
    var
    x:longint;
    a:string;
    begin
    x := GetSystemMetrics(SM_CXSCREEN);
    Str(x,a);
    Label1.Caption := '显示器水平分辨率' + a;
    x := GetSystemMetrics(SM_CYSCREEN);
    Str(x,a);
    Label2.Caption := '显示器垂直分辨率' + a;
    end; 
     
    启动关闭热启动
     
    如果你是要制作一个有密码保护的屏幕保护程序,那么关闭热启动将是非?匾模裨虮蝗艘话慈绕舳乇樟四愕某绦颍敲床皇瞧鸩涣吮;ぷ饔寐穑? 要使系统的热启动键(Ctrl+Alt+Del)失效,使用以下语句
    SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, 0, 0);
    要恢复系统的热启动键(Ctrl+Alt+Del),使用以下语句
    SystemParametersInfo(SPI_SCREENSAVERRUNNING, 0, 0, 0); 
     
    启动屏幕保护程序
     
    在一些比较高级的程序中,有些资料是秘密的,那么在有人接近的时候,就需要启动一个屏幕保护,保护自己的电脑资料,所以我们选用WINDOWS的屏幕保护功能,可是操作系统需要我们在一定的时间内不接触电脑才能启动保护程序,这是达不到实时效果的,所以利用下列语句直接开始Windows的屏幕保护程序:
    SendMessage(HWND_BROADCAST,WM_SYSCOMMAND,SC_SCREENSAVE,0);
    把以上语句放到程序的某个菜单中,并为该菜单定义一个热键,那么下次就只需按一个键就保护了自己的资料。 
     
    取得系统界面颜色
     
    制作程序时,被Windows的界面色彩弄得头昏眼花,设计时是一种颜色,色彩搭配得挺好的,可是到了用户手里字体却看不清楚,严重影响了程序效果,所以结合操作系统调配颜色将是令用户用得开心的不可多得的步骤:
    下面列出了操作系统界面各部位的名称,要取得系统颜色,把参数换一下就可以了
    COLOR_SCROLLBAR      滚动条
    COLOR_BACKGROUND     桌面背景
    COLOR_ACTIVECAPTION    活动窗口标题
    COLOR_INACTIVECAPTION   非活动窗口标题
    COLOR_MENU        菜单
    COLOR_WINDOW       窗口背景
    COLOR_WINDOWFRAME     窗口框
    COLOR_MENUTEXT      窗口文字
    COLOR_WINDOWTEXT     3D 阴影 (Win95)
    COLOR_CAPTIONTEXT     标题文字
    COLOR_ACTIVEBORDER    活动窗口边框
    COLOR_INACTIVEBORDER   非活动窗口边框
    COLOR_APPWORKSPACE    MDI 窗口背景
    COLOR_HIGHLIGHT      选择条背景
    COLOR_HIGHLIGHTTEXT    选择条文字
    COLOR_BTNFACE       按钮
    COLOR_BTNSHADOW      3D 按钮阴影
    COLOR_GRAYTEXT      灰度文字
    COLOR_BTNTEXT       按钮文字
    COLOR_INACTIVECAPTIONTEXT 非活动窗口文字
    COLOR_BTNHIGHLIGHT    3D 选择按钮}
    var I:integer;
    begin
    //取得活动窗口标题颜色
    I :=GetSysColor(COLOR_ACTIVECAPTION);
    Label1.Caption:='颜色代码为:'+IntTostr(I);
    end; 
     
    改网络计算机名
     
    连接入网络的计算机都有一个自己的名称,改变或命名计算机在网络中的名字是不可少的步骤,下面的语句就实现了该功能,必须重新启动后才能生效:
    SetComputerName('Hello World'); 
     
    控制壁纸
     
    控制Windows的桌面壁纸是一些看图工具常有的功能,要实现该功能是非常容易的,以下的程序使壁纸换为我们想要的图片,如果THEPCHAR为空,那么就取消壁纸,变为Win默认色彩;但这种方法只是暂时的,在WINDOWS重新启动后还是恢复原来的位图,所以要永久保留还需要对WIN.INI文件进行改写操作,才能保存住我们改动的图片不被替换。但这种暂时性也好在让我们可以实现定时更换桌面图片功能:
    var THEPCHAR:pchar;
    begin
    THEPCHAR:='e:\a.jpg';
    SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, THEPCHAR, SPIF_SENDWININICHANGE)
    end; 
      

  4.   

    先谢谢大家的帮忙
    human_2(风一帆) 你的算法我考虑过 不过还是觉得不妥 希望有更好一点的算法
    希望大家多帮忙