我有以下代码(RAD Studio XE2,Windows 7 x64):
program letters;
{$APPTYPE CONSOLE}
{$DEFINE BOO}
const
ENGLISH_ALPHABET = 'abcdefghijklmnopqrstuvwxyz';
begin
{$IFDEF BOO}
writeln;
{$ENDIF}
write(ENGLISH_ALPHABET[1]:3);
readln;
end.
Run Code Online (Sandbox Code Playgroud)
当{$DEFINE BOO}指令关闭时,我有以下(预期)输出(为了便于阅读,空格被替换为点):
..a
Run Code Online (Sandbox Code Playgroud)
当指令打开时,我有以下(意外)输出:
// empty line here
?..a
Run Code Online (Sandbox Code Playgroud)
而不是预期的
// empty line here
..a
Run Code Online (Sandbox Code Playgroud)
当我改为const ENGLISH_ALPHABET时const ENGLISH_ALPHABET: AnsiString,预期的输出打印没有问题字符.当:3格式化被删除或改变:1,没有问号.当输出重定向到文件时(通过AssignFile(Output, 'boo.log')命令行或从命令行),再没有问号.
这种行为的正确解释是什么?
我试图以下列方式使用TFlowPanel组件:
Form1组件上FlowPanel1: TFlowPanel. Form1.Width = 400,FlowPanel1.Align = alTop,FlowPanel1.AutoSize = True,FlowPanel1.AutoWrap = True. FlowPanel15个SpeedButtons上并将它们设置Width为64. Form1.Width = 200).出于某种原因,当用户调整表单大小时,速度按钮不会自动排成两行.虽然,当它们排成两行时AutoSize = False,AutoWrap = True.
这种行为的原因是什么以及如何解决?
编辑:我发现了"快速而肮脏"的解决方案.以下代码是事件的事件处理程序TFlowPanel.OnResize:
procedure TForm1.FlowPanel1Resize(Sender: TObject);
begin
with FlowPanel1 do
begin
AutoSize := False;
Realign; // line up controls
AutoSize := True; // adjust TFlowPanel.Height
end;
end;
Run Code Online (Sandbox Code Playgroud)
但是,我仍然想知道是否有一种解决问题的标准方法.
我正在处理大量的整数排列.每个排列中的元素数量为K.元素大小为1个字节.我需要生成N个唯一的随机排列.
约束:K <= 144,N <= 1,000,000.
我想出了以下简单的算法:
有一个更好的方法吗?特别是,有没有办法不将所有排列存储在RAM中(在生成时将它们写在磁盘上)?
编辑:最后,需要按顺序访问生成的排列(逐个访问,不需要随机访问).RAM是更关键的因素(我宁愿不在RAM中同时存储所有排列).
language-agnostic algorithm permutation combinatorics random-sample