Delphi洗牌算法 - 将一个数组随机乱序

用于考试时乱序,相同的试题,但每位考生看到的题序不同。


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids;

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure InitValue();
    procedure tmprandom();
  end;

var
  Form1: TForm1;
  Array20 : array[1..20] of String;

implementation

{$R *.dfm}

//布局
procedure TForm1.FormCreate(Sender: TObject);
begin
  Self.Width := 950
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Delphi7中实现洗牌算法,可以使用插牌思路或者换牌思路。插牌思路是指每次生成一张最大的牌,与随机的某张牌换位子,这种洗牌是均匀的。以下是一个使用插牌思路的Delphi7代码示例: ```delphi function ShuffleInsert(m: Integer): TArray<Integer>; var arr: TArray<Integer>; i, rnd, temp: Integer; begin SetLength(arr, m); arr\[0\] := 0; for i := 1 to m - 1 do begin rnd := Random(i + 1); arr\[i\] := arr\[rnd\]; arr\[rnd\] := i; end; Result := arr; end; ``` 换牌思路是指每次将第i张牌与任意一张牌换位子,换完一轮即可。以下是一个使用换牌思路的Delphi7代码示例: ```delphi function ShuffleSwap(m: Integer): TArray<Integer>; var arr: TArray<Integer>; i, rnd, temp: Integer; begin SetLength(arr, m); for i := 0 to m - 1 do begin arr\[i\] := i; end; for i := 0 to m - 1 do begin rnd := Random(i + 1); temp := arr\[rnd\]; arr\[rnd\] := arr\[i\]; arr\[i\] := temp; end; Result := arr; end; ``` 以上代码示例可以在Delphi7中使用,分别实现了插牌思路和换牌思路的洗牌算法。 #### 引用[.reference_title] - *1* *2* *3* [随机问题之洗牌算法](https://blog.csdn.net/weixin_33743248/article/details/89443454)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值