level 2
额……题目呢?好吧,只能给你讲讲Random怎么用了。
Random函数,用N:=random(X);其中,N和X都是整数型的。系统会产生[0,X-1]之间的正整数。不过这样只会产生1个数,不会换另一个,所以建议你在程序首部加上randomize;
这是个随机种子。
程序如下:
var
n,x:longint;//我比较喜欢用longint,integer可能会超限;
begin
randomize;
n:=random(x);//n=0~(x-1)的数
writeln(n);
end.
2017年01月19日 05点01分
2
level 9
随机算法有很多的
我知道一种,比如枚举一个四位数的话,先用搞出一个初值,将其变成一个大数,再取中间四位,这样一直往复
这样的话规律就会很难找,就算的上是一个伪随机数了
2017年01月19日 06点01分
3
level 9
{$R-} {range checking off}
{$Q-} {overflow checking off}
Const MT19937N=624;
Type
tMT19937StateArray = array [0..MT19937N-1] of longint;
const
MT19937M=397;
MT19937MATRIX_A =$9908b0df;
MT19937UPPER_MASK=longint($80000000);
MT19937LOWER_MASK=longint($7fffffff);
TEMPERING_MASK_B=longint($9d2c5680);
TEMPERING_MASK_C=longint($efc60000);
VAR
mt : tMT19937StateArray;
const
mti: longint=MT19937N+1;
procedure sgenrand_MT19937(seed: longint);
var
i: longint;
begin
mt[0] := seed;
for i := 1 to MT19937N-1 do
begin
mt[i] := 1812433253 * (mt[i-1] xor (mt[i-1] shr 30)) + i;
end;
mti := MT19937N;
end;
functiоn genrand_MT19937: longint;
const
mag01 : array [0..1] of longint =(0, longint(MT19937MATRIX_A));
var
y: longint;
kk: longint;
begin
if RandSeed<>OldRandSeed then
mti:=MT19937N+1;
if (mti >= MT19937N)
then begin
if mti = (MT19937N+1) then
begin
sgenrand_MT19937(randseed);
randseed := not(randseed);
oldrandseed := randseed;
end;
for kk:=0 to MT19937N-MT19937M-1 do begin
y := (mt[kk] and MT19937UPPER_MASK) or (mt[kk+1] and MT19937LOWER_MASK);
mt[kk] := mt[kk+MT19937M] xor (y shr 1) xor mag01[y and $00000001];
end;
for kk:= MT19937N-MT19937M to MT19937N-2 do begin
y := (mt[kk] and MT19937UPPER_MASK) or (mt[kk+1] and MT19937LOWER_MASK);
mt[kk] := mt[kk+(MT19937M-MT19937N)] xor (y shr 1) xor mag01[y and $00000001];
end;
y := (mt[MT19937N-1] and MT19937UPPER_MASK) or (mt[0] and MT19937LOWER_MASK);
mt[MT19937N-1] := mt[MT19937M-1] xor (y shr 1) xor mag01[y and $00000001];
mti := 0;
end;
y := mt[mti]; inc(mti);
y := y xor (y shr 11);
y := y xor (y shl 7) and TEMPERING_MASK_B;
y := y xor (y shl 15) and TEMPERING_MASK_C;
y := y xor (y shr 18);
Result := y;
end;
functiоn random(l:longint): longint;
begin
if (l < 0) then
inc(l);
random := longint((int⑥4(cardinal(genrand_MT19937))*l) shr 32);
end;
functiоn random(l:int⑥4): int⑥4;
begin
random := int⑥4((qword(cardinal(genrand_MT19937)) or ((qword(cardinal(genrand_MT19937)) shl 32))) and $7fffffffffffffff);
if (l<>0) then
random := random mod l
else
random := 0;
end;
functiоn random: extended;
begin
random := cardinal(genrand_MT19937) * (extended(1.0)/(int⑥4(1) shl 32));
end;
2017年01月19日 17点01分
6
int⑥4
2017年01月20日 00点01分
Int⑥⑥⑥⑥⑥⑥⑥⑥⑥⑥⑥⑥⑥⑥⑥⑥⑥⑥⑥⑥⑥⑥⑥⑥⑥⑥⑥⑥⑥
2017年01月28日 05点01分
这犇的6键坏了?
2017年01月28日 05点01分
level 9
下面的一段伪代码使用MT19937算法生成范围在[0, 2^32-1]的均匀分布的32位整数:
//创建一个长度为624的数组来存储发生器的状态
int[0..623] MT
int index = 0
//用一个种子初始化发生器
function initialize_generator(int seed) {
i := 0
MT[0] := seed
for i from 1 to 623 { // 遍历剩下的每个元素
MT[i] := last 32 bits of(1812433253 * (MT[i-1] xor (right shift by 30 bits(MT[i-1]))) + i) // 0x6c078965
}
}
// Extract a tempered pseudorandom number based on the index-th value,
// calling generate_numbers() every 624 numbers
function extract_number() {
if index == 0 {
generate_numbers()
}
int y := MT[index]
y := y xor (right shift by 11 bits(y))
y := y xor (left shift by 7 bits(y) and (2636928640)) // 0x9d2c5680
y := y xor (left shift by 15 bits(y) and (4022730752)) // 0xefc60000
y := y xor (right shift by 18 bits(y))
index := (index + 1) mod 624
return y
}
// Generate an array of 624 untempered numbers
function generate_numbers() {
for i from 0 to 623 {
int y := (MT[i] & 0x80000000) // bit 31 (32nd bit) of MT[i]
+ (MT[(i+1) mod 624] & 0x7fffffff) // bits 0-30 (first 31 bits) of MT[...]
MT[i] := MT[(i + 397) mod 624] xor (right shift by 1 bit(y))
if (y mod 2) != 0 { // y is odd
MT[i] := MT[i] xor (2567483615) // 0x9908b0df
}
}
}
2017年01月28日 06点01分
11
有通俗易懂的原理吗?thank
2017年01月30日 04点01分
level 4
var
a,b,c,d,e,f,g:longint; ch:char;
begin
randomize;
for a:=1 to 4 do
begin
b:=random(4)+1;
c:=random(100);
d:=random(100);
if b=4 then if d=0 then d:=1;
2017年04月26日 12点04分
18
level 4
case b of
1:begin ch:='+'; e:=c+d; end;
2:begin ch:='-'; e:=c-d; end;
3:begin ch:='*'; e:=c*d; end;
4:begin ch:='/'; e:=trunc(c/d)+1; end;
end;
writeln(c,ch,d,'=');
read(f);
if f=e then g:=g+10;
writeln('de feng=',g);
end;
end.
2017年04月26日 12点04分
19