我正在嘗試執行批量任務,該任務在特定範圍內生成隨機數,我已經使用下面列出的代碼完成了這些任務。%批量隨機%以及如何避免特定範圍內的特定數字?
set /a setvar=%random% %% 100+0
另外一組數字也應該避免,到目前爲止我還無法實現。
我的意思是一個批處理文件,將1-100之間產生的數字,但避免數字10,20,30,40,50,60,70,80和90
是否有任何解決方案這個?我很茫然。
我正在嘗試執行批量任務,該任務在特定範圍內生成隨機數,我已經使用下面列出的代碼完成了這些任務。%批量隨機%以及如何避免特定範圍內的特定數字?
set /a setvar=%random% %% 100+0
另外一組數字也應該避免,到目前爲止我還無法實現。
我的意思是一個批處理文件,將1-100之間產生的數字,但避免數字10,20,30,40,50,60,70,80和90
是否有任何解決方案這個?我很茫然。
@echo off
setlocal
:: set list of values that should be avoided
for /l %%N in (10,10,90) do (
set "_%%N=."
)
set /a setvar=%random% %% 100+1
:: if value is in the list sums the set value with
:: random value between 0 and 9 getting modulus of 9
if defined _%setvar% (
set /a setvar=setvar + %random% %% 9 + 1
)
echo %setvar%
這是很容易實現的:
@echo off
:GetNumber
set /a Number=%random% %% 100
set /a Remainder=Number %% 10
if %Remainder% == 9 if not %Number% == 99 goto GetNumber
set /a Number+=1
echo Random number is %Number%
首先隨機數在範圍0除以100的隨機數計算爲99和分配只是其餘是對環境變量。
該隨機數除以10得到餘數。
如果這個餘數是9並且數字不是99,那麼在上一步中加1之後,數字將是10或20或30。因此,通過使用新的隨機數再次運行整個計算,必須忽略數字9,19,29,39,...。
@ECHO OFF
SETLOCAL
:GetNumber
set /a setvar=%random% %% 100 + 1
IF %setvar% neq 100 IF %setvar:~-1%==0 GOTO getnumber
echo Random number is %setvar%
GOTO :EOF
你說你不想產生?0,但你沒有說你不想100
。該程序在沒有(10 20 30 40 50 60 70 80 90)的情況下生成。如果你也想排除100,然後取出IF %setvar% neq 100
對於在1-99範圍內的值,只要保證在1-9範圍內的最後一位秋天
set /a "setvar=(%random% %% 100/10 * 10) + (%random% %% 9 + 1)"
或者,如果範圍是1-100和100必須被包括在允許值
set /a "x=%random% %% 91 + 1", "x=x+(x-1)/9", "x=x-x/100"
在這種情況下,列表中的源範圍1-91
(即除了有問題的數字1-100
)被映射到目標範圍1-100
廣告ding的準確值,以跳過排除的號碼
好,但會更好的一些意見:-) – jeb
@Mofi,@ jeb - 我已添加comments.And是可能的打一個案件時,9的模數爲空同時價值爲10倍。現在應該固定。 – npocmaka