注册 登录
编程论坛 VB6论坛

问个数字问题

yz1025 发布于 2022-12-09 17:33, 2426 次点击
S0                                                                                S1......   
    G0        G1        G2        G3        G4        G5        G6        G7   
    0        16        32        48        64        80        96        112   
    1        17        33        49        65        81        97        113   
    2        18        34        50        66        82        98        114   
    3        19        35        51        67        83        99        115   
    4        20        36        52        68        84        100        116   
    5        21        37        53        69        85        101        117   
    6        22        38        54        70        86        102        118   
    7        23        39        55        71        87        103        119   

    8        24        40        56        72        88        104       120    
    9        25        41        57        73        89        105       121   
    10        26        42        58        74        90        106       122   
    11        27        43        59        75        91        107        123   
    12        28        44        60        76        92        108        124   
    13        29        45        61        77        93        109        125   
    14        30        46        62        78        94        110        126   
    15        31        47        63        79        95        111        127   

0-127为S0,128-255为S1....一直到S20...
0-127每16为1组,从G0-G7,之后G8-G15.....
随机取个数字,该数字必须不属于S(N)的最后一组G7*N,也不属于S(N)前G0*N-G6*N组内前8个数字,这个计算公式要怎么写?
还要取得该数字是踩到G7的16位,或前几组的前8位。

[此贴子已经被作者于2022-12-9 17:48编辑过]

11 回复
#2
yz10252022-12-09 17:42
有没有比较恰当的写法?我现在事先把S(N)的最后一组取出,然后再做else ....,之后就还在想。
#3
yuma2022-12-09 17:44
每行的第一个数字 +16  +16*2 +16*3.... 而已。
#4
yz10252022-12-09 18:01
以下是引用yuma在2022-12-9 17:44:08的发言:

每行的第一个数字 +16  +16*2 +16*3.... 而已。



公司网路无法贴图,简单说应该就是检查一大堆数字,再把踩到条件的数字记录下来
程序代码:

            ElseIf Temp1 = "FRC" And Check2(3).Value = 1 Then ' 以片内指定群组为单位 TS.TS_CH(TSNum).TS_PE (同一片PE Slot)_(同一组)_(Channel)
                If Temp = "KD" Then
                    If .iTitle(index2).FRC(index1) = "" Then
                        .iTitle(index2).FRC(index1) = CStr(TempCode1) & "_" & CStr(TempCode2 \ 8) & "_" & CStr(TempCode2)
                    Else
                        .iTitle(index2).FRC(index1) = .iTitle(index2).FRC(index1) & "," & CStr(TempCode1) & "_" & CStr(TempCode2 \ 8) & "_" & CStr(TempCode2)
                    End If
'问题是以下这部分
                ElseIf Temp = "ED" Then
                    If .iTitle(index2).FRC(index1) = "" Then
                        .iTitle(index2).FRC(index1) = CStr(TempCode1) & "_" & CStr(TempCode2 \ 16) & "_" & CStr(TempCode2)
                    Else
                        .iTitle(index2).FRC(index1) = .iTitle(index2).FRC(index1) & "," & CStr(TempCode1) & "_" & CStr(TempCode2 \ 16) & "_" & CStr(TempCode2)
                    End If
                End If

            ElseIf ...
#5
风吹过b2022-12-09 22:40
不贴代码了,自己看。

只有本站会员才能查看附件,请 登录


只有本站会员才能查看附件,请 登录
#6
风吹过b2022-12-09 22:44
我的算法是先把数据扔到结构里去,并且对结构分好组,定好位置来,
然后再生成位置,每一步都根据条件去判断生成的位置是否符合条件,
当所生成的数据的位置符合条件时,自然而然的就取到的数据。

数组结构,不使用 结构体,而使用 三维数组也是可以的,看每个人的习惯而以。
#7
风吹过b2022-12-09 22:49
范围限制加二条限制,前三条是代码里有的,再加二条,防止报错。

If i1 < 0 Or i1 > 7 Then Exit Sub   '超范围不执行,下同
If m1 < 0 Or m1 > 16 Then Exit Sub
If m2 < 0 Or m2 > 16 Then Exit Sub
If m2 - m1 > 8 Then Exit Sub         '限定排除范围最多一半
If m1 > m2 Then Exit Sub             '起始值大于终止值

#8
jklqwe1112022-12-09 23:45
a=(N\8) mod 16
(a and 1)<>0   and a<>15

#9
clyfd2022-12-11 14:03
正好需要,学习了
#10
yz10252022-12-12 15:15
公司網路不能看,只能回家再看看
#11
yz10252022-12-12 18:02
以下是引用yz1025在2022-12-9 17:33:58的发言:

S0                                                                                S1......   
    G0        G1        G2        G3        G4        G5        G6        G7   
    0        16        32        48        64        80        96        112   
    1        17        33        49        65        81        97        113   
    2        18        34        50        66        82        98        114   
    3        19        35        51        67        83        99        115   
    4        20        36        52        68        84        100        116   
    5        21        37        53        69        85        101        117   
    6        22        38        54        70        86        102        118   
    7        23        39        55        71        87        103        119   
    8        24        40        56        72        88        104        120   
    9        25        41        57        73        89        105        121   
    10        26        42        58        74        90        106        122   
    11        27        43        59        75        91        107        123   
    12        28        44        60        76        92        108        124   
    13        29        45        61        77        93        109        125   
    14        30        46        62        78        94        110        126   
    15        31        47        63        79        95        111        127   

0-127为S0,128-255为S1....一直到S20...
0-127每16为1组,从G0-G7,之后G8-G15.....
随机取个数字,该数字必须不属于S(N)的最后一组G7*N,也不属于S(N)前G0*N-G6*N组内前8个数字,这个计算公式要怎么写?
还要取得该数字是踩到G7的16位,或前几组的前8位。



商   MOD   商  MOD   商  MOD
0    0    2    0    4    0
0    1    2    1    4    1
0    2    2    2    4    2
0    3    2    3    4    3
0    4    2    4    4    4
0    5    2    5    4    5
0    6    2    6    4    6
0    7    2    7    4    7

1    0    3    0    5    0
1    1    3    1    5    1
1    2    3    2    5    2
1    3    3    3    5    3
1    4    3    4    5    4
1    5    3    5    5    5
1    6    3    6    5    6
1    7    3    7    5    7

发现把商和MOD的值列出来就发现规律了

需求是要将任一值运算后,得出该值是属于哪一个区块(3个区块之一)

(S和G实际上并不存在,只是为了方便大家理解,才特意标注,事实上全部都是数字)
我是让任一值第一步先If运算去掉每S的最后一列,然后else剩余的数字再除以8求商,
只要商MOD2为0的就是归属上排,其余的皆为下排数字
#12
cmarlboro2023-02-10 15:23
学习
1