Board logo

标题: [ 新手练习 6 ] 批处理判断奇数偶数 [打印本页]

作者: wxcute    时间: 2008-12-1 16:17     标题: [ 新手练习 6 ] 批处理判断奇数偶数

生成一随机数,判断它是奇数还是偶数,或者说是单数还是双数。

目的:掌握如何生成随机数,并了解取余运算的用处。

要求:显示出随机数,并显示判断结果(是奇数还是偶数)。
   方法不限。

评分:代码可读性 1 分;
   首个新方法 6 分,第二个 5 分,依次类推,最少 2 分;
   一人可多种方法,新方法追加 3 分,已经出现过的方法追加 1 分。
作者: BBCC    时间: 2008-12-1 18:37

  1. @echo off
  2. set/a str=%random%,str2=str%%2
  3. if %str2% equ 0 (echo. %str% 是偶数) else (echo. %str%是奇数)
  4. pause>nul
复制代码

作者: tireless    时间: 2008-12-1 19:24

  1. @echo off
  2. set /a str=%random%,str2=str*5
  3. if %str2:~-1%==0 (echo %str% 是偶数) else (echo %str% 是奇数)
  4. pause
复制代码
一不小心看到了 2 楼的代码... str2=str*5 这个没有用过,学习了。
作者: Batcher    时间: 2008-12-1 19:46

0是奇数还是偶数呢?
google了一下,没有找到什么结论。
作者: BBCC    时间: 2008-12-1 19:53

原帖由 Batcher 于 2008-12-1 19:46 发表
0是奇数还是偶数呢?
google了一下,没有找到什么结论。


貌似不纳入考虑范围.

说错别骂我啊 ^_^
作者: youxi01    时间: 2008-12-1 20:49

0当然是偶数
作者: pizidu    时间: 2008-12-1 22:09

  1. @echo off
  2. set /p var=你取的随机数是:%random%
  3. set /a str2=%random%%%2
  4. if %str2% equ o (echo.它是个偶数) else (echo.它是个奇数)
  5. pause>nul
复制代码
set /p var=你取的随机数是:%random%在这一句会停一下不知道是嘛意思..!
作者: pusofalse    时间: 2008-12-1 22:13     标题: 回复 8楼 的帖子

代码有明显的错误。
%random%是动态变量,它是实时变化的。
set /p var=你取的....这句表示运行到此处暂停,等待用户输入,并把用户输入的值赋予变量var
if %str2% equ o 这里错了,再怎么说也不能是个字母。
楼上每个答案几乎都是用if来判断,可否换种思路:0不能用作除数,否则errorlevel值是个非0的数字。
而||判别前面命令是否成功的标准就是通过判断第一条命令返回的errorlevel是否为0,不为0则是失败,即执行后面的命令。

[ 本帖最后由 pusofalse 于 2008-12-1 22:17 编辑 ]
作者: youxi01    时间: 2008-12-1 22:47

除了楼上的方法,还可以直接定义啊,完全避开条件检测。
方法如下:
set 0="偶数"
set 1="奇数"
后面的略...
作者: pizidu    时间: 2008-12-1 23:25

受教了....这两天就在这看代码来着.
作者: rat    时间: 2008-12-1 23:41

可否换种思路:0不能用作除数,否则errorlevel值是个非0的数字。
而||判别前面命令是否成功的标准就是通过判断第一条命令返回的errorlevel是否为0,不为0则是失败,即执行后面的命令。

  1. 2>nul set/a1/(%random%%%2)&&echo 奇数||echo 偶数
  2. pause
复制代码


嘿嘿
作者: pusofalse    时间: 2008-12-2 09:37     标题: 回复 10楼 的帖子

youxi果真高人~
但在不开启变量延迟用!!闭合变量的情况下,%0%、%1%会被误解析吧。
  1. @echo Off & Setlocal EnableDelayedExpansion
  2. Set "0=Even" & Set "1=Odd"
  3. Set /a Num=%Random%, n=Num %% 2
  4. Echo %Num% !%n%!
  5. Pause
复制代码
Num%%2等同于 Num "&" 1,所以用位运算也可以解答此题。
但wxcute兄的要求是让明白取余运算。只须知道“按位相与”在一定程度上比“取余”要快就好了~
作者: BBCC    时间: 2008-12-2 12:51

原帖由 youxi01 于 2008-12-1 20:49 发表
0当然是偶数


的确如此,按规定:
任何能被2整除的自然数就是偶数,因而0就是偶数。
作者: chengyuan383    时间: 2008-12-3 12:08

  1. @echo off
  2. set p=%random%
  3. set /a var=%p%%%2
  4. if %var% equ 0  (echo %p%是偶数) else (echo %p%是奇数)
  5. pause
复制代码

作者: mingming1205    时间: 2008-12-3 15:51

  1. @echo off
  2. set var=%random%
  3. set v1=%var:~-1,1%
  4. for %%i in (0 2 4 6 8) do (
  5. if %v1%==%%i goto :sub
  6. )
  7. echo 不是偶。
  8. pause>nul
  9. exit
  10. :sub
  11. echo 是偶。
  12. pause>nul
  13. exit
复制代码
是1号的帖子~~!!!
作者: 随风    时间: 2008-12-3 16:58

  1. @echo off
  2. set .0=奇数&set .1=偶数
  3. :loop
  4. setlocal&cls
  5. set /a n=%random%,m=!(n%%2)
  6. call echo %n% 是 %%.%m%%%
  7. endlocal&pause&goto loop
复制代码

[ 本帖最后由 随风 于 2008-12-3 17:55 编辑 ]
作者: nomyself    时间: 2008-12-4 16:03

这个简单。
  1. @echo off
  2. set var=%random%
  3. set /a result=%var%%%2
  4. if %result%==0 (echo %var% 是偶数) else echo %var% 是奇数
  5. pause
复制代码

作者: firewolf85    时间: 2008-12-7 16:30

  1. @echo off
  2. set /a num=%random%
  3. echo %num%
  4. set /a ys=%num%%%2
  5. if %ys%==0 (echo 偶数) else (echo 奇数)
  6. pause>nul
复制代码

作者: vyuwwen1985    时间: 2009-1-14 11:47     标题: 回复

@echo off
set b=%random%
set /a c=%b%%%2
echo %b%&if "%c%"=="0"  (echo 该数是偶数) else (echo 该数是奇数)
pause
作者: skuny    时间: 2009-1-16 11:32

借用rat的
  1. @echo off
  2. set/a a=%random%/(%random%%%2) 2>nul
  3. if %errorlevel%==0 (echo 奇数) else echo 偶数
  4. pause
复制代码
  1. @echo off
  2. set/a a=-~(%random%%%2)
  3. if %a%==1 (echo 偶数) else echo 奇数
  4. pause
复制代码

作者: gobat    时间: 2009-1-28 14:00

原帖由 BBCC 于 2008-12-1 19:53 发表


貌似不纳入考虑范围.

说错别骂我啊 ^_^


以2 4 6 8 0结尾的是双数
以1 3 5 7 9结尾的是单数
能被2整除的是偶数
不能被2整除的是单数
这事数学的基本定理
作者: aresk    时间: 2009-2-15 21:41

  1. @echo off
  2. set r=%random%
  3. set /p a=%r%是<NUL
  4. set /a b=%r%%%2
  5. if %b% equ 0 (echo 偶数) else (echo 奇数)
  6. pause
复制代码

作者: TonyW    时间: 2009-2-18 03:56     标题: 我是新手,别笑我- -!

@echo off
:d
set /a m=%random%
set /a i=%m:~-1%
for %%j in (0,2,4,6,8) do if %%j==%i% echo 随机产生的数为:%m%     该数为偶数
for %%k in (1,3,5,7,9) do if %%k==%i% echo 随机产生的数为:%m%     该数为奇数
pause & goto d



我也来发一下,我是超级新手,各位看了多批评指正。
看了题目就开始做,干掉了我5个小时终于做出来!5555555
回头看楼上各位的代码,哎~~惭愧啊!
PS:修改了一下,看了楼上几位的代码发现原来%random% 后面可以不用带数字!! ^^

[ 本帖最后由 TonyW 于 2009-2-18 04:00 编辑 ]
作者: hq624517491    时间: 2009-2-20 14:48

:1
@set /a a=%random%
@set /a b=%a%%%2
@if %b%==0 (echo %a%是一个偶数) else (echo %a%是一个奇数)
@pause
goto 1
作者: myzwd    时间: 2009-2-22 21:28     标题: 回复 1楼 的帖子

@echo off
:eo
cls
set /a tt=%random%
set /a "ss=%tt%%%2"
if "%ss%" equ "0" (echo %tt% is odd) else (echo %tt% is even )


echo c is continue ,other letter halt
set /p uu=
if %uu% equ c goto eo else goto end
:end
echo bye
goto:eof
作者: keen    时间: 2009-3-17 12:40

  1. @echo off
  2. set a=%random%
  3. echo 随机数是%a%
  4. set /a b=%a%%%2
  5. if %b%==0 goto oushu
  6. :jishu
  7. echo %a%是奇数!
  8. pause
  9. exit
  10. :oushu
  11. echo %a%是偶数!
  12. pause
复制代码

[ 本帖最后由 keen 于 2009-3-17 12:55 编辑 ]
作者: hyx    时间: 2009-3-18 14:31

@echo off
echo 请按随意键产生一个随机数
pause>nul
set a=%random%
set /a b=a%%2
if %b%==1 echo %a%为奇数
if %b%==0 echo %a%为偶数
pause>nul
作者: stuqx    时间: 2009-3-21 21:36

  1. @echo off
  2. set /a rdm=%random%
  3. echo 随机数是%rdm%
  4. if %rdm%%%2 equ 0 (echo 该随机数是偶数) else (echo 该随机数是奇数)
  5. pause
复制代码

作者: yangyuankui    时间: 2009-4-20 14:47     标题: result

@echo off
:start
set /a a=%random%%%10
set /a b=%a%%%2
echo %b%
if "%b%"=="0" echo the number is singular
if "%B%"=="1"  echo the number is dual
echo %a% %b%

pause
作者: sjzong    时间: 2009-4-21 20:55     标题: 我也来一个!

我也借用12楼,rat的代码写写:
  1. @echo off
  2. set/a num=%random%
  3. 2>nul set/a1/(%num%%%2)&&echo %num% 是奇数||echo %num% 是偶数
  4. pause>nul
复制代码
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set var=%random%
  4. set num=
  5. for /f "delims=13579" %%i in ("!var:~-1!") do set num=%%i
  6. if not defined num (echo !var!是奇数) else (echo !var!是偶数)
  7. pause>nul
复制代码

[ 本帖最后由 sjzong 于 2009-4-21 23:24 编辑 ]
作者: P_Ricky    时间: 2010-4-14 16:10

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set a=%random%
  4. set /a b=%a% %% 2
  5. if %b% ==1 echo %a%是奇数
  6. if %b% ==0 echo %a%是偶数
  7. pause
复制代码

作者: 634175535    时间: 2010-4-24 15:14

想了很久也没有想出来丶丶丶
作者: mangci    时间: 2010-5-12 23:22

  1. @ echo off
  2. set "num=%random%%%2"
  3. if %num% ==0 (echo,随机数是偶数) else (echo,随机数是奇数)
  4. pahse
复制代码

作者: neorobin    时间: 2010-5-13 01:02

  1. set 数=%random%&set 数&set/a "数&1"|find "1">nul&&echo 奇||echo 偶&pause
复制代码

[ 本帖最后由 neorobin 于 2010-5-13 01:08 编辑 ]
作者: raymai97    时间: 2010-6-1 21:11

2L, 请问str2=str%%2是什么意思?
作者: poxi    时间: 2010-7-19 13:08

答:
  1. @echo off
  2. set /a ran=%random%
  3. echo 产生的是%ran%
  4. set /a end=%ran%%%2
  5. if %end%==0 (echo 他是偶数) else (echo TA是奇数)
  6. pause>nul
复制代码
老方法了........
效果:

==========
end;
作者: Hello123World    时间: 2011-7-27 17:01

  1. @echo off
  2. ::判断0-99这100个数的奇偶性
  3. Set /a a=%Random%%%100
  4. Set /a b=%a%%%2
  5. If %b%==0 (echo %a%是偶数) else (echo %a%是奇数)
  6. pause
  7. %0
复制代码

作者: 唯尘    时间: 2024-1-31 09:14

@echo off
set /p num=请输入:
set /a n=%num%%%2
if %n% equ 0 (echo %num% 是偶数) else (echo %num% 是奇数)
pause>nul 2>nul
作者: 唯尘    时间: 2024-2-18 14:56

@echo off
set var=%random%
echo %var%
set /a num=%var%%%2
if %num% equ 0 (echo 随机数是偶数) else (echo 随机数是奇数)
pause>nul
作者: 唯尘    时间: 2024-3-21 08:49

@echo off
:sc
set /a num=%random%
set /a a=%num%%%2
if %a%==0 (echo 偶数) else (echo 奇数)
ping 127.0.0.0 -n 1 >Nul 2>Nul
goto :sc
作者: 唯尘    时间: 2024-4-2 08:10

@echo off
:sc_start
set /p str=请输入需要判断的数值:
set /a s=%str%%%2
if %s%==1 (echo 奇数) else (echo 偶数)
pause>nul
goto :sc_start




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2