标题: [数值计算] 问第100个服务员走进后有哪几扇门是开着的批处理试题[1] [打印本页]
作者: curious 时间: 2009-6-6 20:02 标题: 问第100个服务员走进后有哪几扇门是开着的批处理试题[1]
某旅馆有100个房间,以1到100编号,第一个服务员来了,他将所有的房门都打开,第二个服务员再把所有编号是2的倍数的房门都关上,第三个服务员对编号是3的倍数的房门原来开的关上,原来关上的打开,此后的第四,五...服务员均照此办理。问第100个服务员走进后,有哪几扇门是开着的。
[ 本帖最后由 curious 于 2009-6-6 20:38 编辑 ]
作者: lhjoanna 时间: 2009-6-6 20:22
- @echo off
- setlocal enabledelayedexpansion
- for /l %%i in (1 1 100) do set /a .%%i=0
- for /l %%i in (1 1 99) do (
- for /l %%j in (1 1 100) do (
- set /a mod=%%j%%%%i
- if !mod! equ 0 set /a .%%j=~!.%%j!
- )
- )
- for /l %%i in (1 1 100) do (
- if not !.%%i! equ 0 set /a num+=1
- )
- echo !num!
- pause
复制代码
我做的结果是1 4 9 16 25 36 49 64 81
一共9扇门
不知对否?
作者: lhjoanna 时间: 2009-6-6 21:27
为何是10个?第100个人还没有开关门吧?
作者: 随风 时间: 2009-6-6 21:43
- @echo off&setlocal enabledelayedexpansion
- set /a m=100,r=100
- for /l %%a in (1 2 !m!) do (
- set /a x=%%a+1
- set /a .m%%a=1,.m!x!=0
- )
- for /l %%a in (3 1 !r!) do (
- for /l %%b in (%%a %%a !m!) do set /a .m%%b="^!(!.m%%b!)"
- )
- for /f "tokens=1,2 delims=.m=" %%a in ('set .') do (
- if %%b equ 1 echo 开着的门编号为: %%a&set /a hj+=1
- )
- echo,&echo,共 !hj! 个
- pause
复制代码
作者: curious 时间: 2009-6-6 23:57 标题: try
- @echo off
- setlocal enabledelayedexpansion
- ::第一个服务员打开所有窗户,打开为1,关上为0
- for /l %%i in (1,1,100) do (
- set /a _%%i=1
- )
-
- ::第二人关编号为2的倍数之窗。第三人操作编号为3的倍数之窗,开的关,关的开...
- for /l %%i in (2,1,100) do (
- set /a n=100 / %%i
- for /l %%j in (1,1,!n!) do (
- set /a c=%%i*%%j
- call set b=%%_!c!%%
- if !b! equ 1 (set /a _!c!=0) else set /a _!c!=1
- )
- )
- ::符合条件输出
- for /l %%i in (1,1,100) do (
- if !_%%i! equ 1 (
- set /a num+=1
- echo %%i
- )
- )
- echo !num!个窗打开的
- pause>nul
复制代码
作者: netbenton 时间: 2009-6-6 23:59
-
- @echo off&setlocal enabledelayedexpansion
- set /p m=输入一个数:
- set /a L1=0,L0=1
- for /l %%a in (1 1 !m!) do (set V%%a=1)
- for /l %%a in (2 1 !m!) do (
- for /l %%b in (%%a,%%a,!m!) do (
- set/a V%%b=L!V%%b!
- )
- )
- set n=0
- set /p= 开着的门编号为:<nul
- for /l %%a in (1 1 !m!) do (
- if !V%%a! equ 1 (set/p=%%a <nul&set/a n+=1)
- )
- echo,&echo,共 !n! 个
- pause
复制代码
作者: curious 时间: 2009-6-7 00:04 标题: to:随风
随风兄写代码之前,最好把思路也带上,以方便象我这样的初学者!
作者: netbenton 时间: 2009-6-7 01:18
再看这个,快了好多。
没想到 set /a V%%b=L!V%%b!
的速度比不上: for %%c in (!V%%b!) do set V%%b=!%%c!
- @echo off&setlocal enabledelayedexpansion
- set /p m=输入一个数:
- set tim=!time!
- set 开=关
- set 关=开
- for /l %%a in (1 1 !m!) do (set v%%a=开)
- for /l %%a in (2 1 !m!) do (
- for /l %%b in (%%a,%%a,!m!) do (
- for %%c in (!V%%b!) do set V%%b=!%%c!
- )
- )
- set n=0
- echo 开着的门编号为:
- for /l %%a in (1 1 !m!) do (
- if !V%%a! equ 开 (set str=!str! %%a<NUL&SET n+="1)
- )
- echo !str!
- echo 共 !n! 个
- pause
复制代码
作者: slore 时间: 2009-6-7 02:01
直接输出平方数。。。行不行
作者: zqz0012005 时间: 2009-6-7 20:17 标题: 回复 8楼 的帖子
http://bbs.bathome.net/viewthrea ... amp;page=2#pid30871
为了充分保证效率千万不要使用下面两个命令
call echo.....
call set a=...
万不得已要call set n=数字
一定要call set/a n=数字 //这个效率还是很高的是set/a 一半的效率
我发现call set a=... 的执行效率比call子过程还要低10倍以上!
看来有点意思。
set、set /a、call、变量延迟,组合不同时,效率也有很大的不同。
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |