中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 出题:科克曼女生问题 上一主题 | 下一主题
WANKOILZ
初级用户





积分 198
发帖 89
注册 2007-9-6
来自 重庆
状态 离线
『楼 主』:  出题:科克曼女生问题

不知道有没有人做过:
有 15 个女生,她们每天早晨都 3人一组 地散步(15个人每天同时去)。现在要求在一周内她们任意两人之间只能碰一次面,请列出每天的分组情况。用bat做出来。

答案见10楼 和 13楼。

───────────────── 版务记录 ─────────────────
执行:HAT
操作:[2008-11-10]在帖子标题中增加搜索关键字
说明:原标题"出一道题"不利于论坛搜索
───────────────── 版务记录 ─────────────────


[ Last edited by HAT on 2008-11-10 at 14:35 ]

2008-6-22 20:32
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 2 楼』:  

不知道考虑全了没:
@echo off&setlocal enabledelayedexpansion
set code=abcdefghijklmnop&set num=15
:lp
set /a a=%random%%%%num%
set a=!code:~%a%,1!
set str=%str%%a%
set code=!code:%a%=!
set /a num-=1
set /a n+=1
if %n% lss 2 goto lp
set codes=%code%
set /a a=%random%%%num%
set a=!codes:~%a%,1!
set str=%str%%a%
set /a m+=1,n=0
echo 星期%m%:%str%
if %m% lss 7 set str=&goto lp
pause>nul
[ Last edited by zw19750516 on 2008-6-22 at 10:07 PM ]



批处理之家新域名:www.bathome.net
2008-6-22 21:58
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
WANKOILZ
初级用户





积分 198
发帖 89
注册 2007-9-6
来自 重庆
状态 离线
『第 3 楼』:  

to zw:
15个女生每天要同时出现哦。

2008-6-22 22:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 4 楼』:  

一周 除去休息日不



简单!简单!再简单!
2008-6-23 11:34
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
WANKOILZ
初级用户





积分 198
发帖 89
注册 2007-9-6
来自 重庆
状态 离线
『第 5 楼』:  

一周7天。

2008-6-23 17:18
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 6 楼』:  

现在才知道  著名的科克曼女生问题



简单!简单!再简单!
2008-6-23 23:08
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 7 楼』:  

有个疑惑,有这样的组合吗?
我手工排都没排出来,只排出4天的。
楼主能给个结果出来吗?



致精致简!
2008-6-24 16:44
查看资料  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 8 楼』:  

排5天可以  但这个科克曼女生问题可以解决 P就很难
搞到5天
@echo off&setlocal enabledelayedexpansion
set str1=ABCDE
set str2=FGHIJ
set str3=KLMNO
:lp
for /l %%i in (0 1 4) do (
for /l %%i in (0 1 4) do set/p =!str1:~%%i,1!!str2:~%%i,1!!str3:~%%i,1! <nul
echo.
set str2=!str2:~1!!str2:~,1!
set str3=!str3:~2!!str3:~,2!
)
pause

[ Last edited by terse on 2008-6-24 at 05:50 PM ]



简单!简单!再简单!
2008-6-24 17:47
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
WANKOILZ
初级用户





积分 198
发帖 89
注册 2007-9-6
来自 重庆
状态 离线
『第 9 楼』:  

to 7楼 : 手工答案是有的,下次有空发上来
至于P,我也弄不出完整答案,只能做到把15人分成35组,两两只向遇一次。却不能完全分组,哎.........,期待有人弄出来。下面是我的.很臃肿....:
@echo off&setlocal enabledelayedexpansion
for /l %%i in (1,1,13) do (
  set/a num1=%%i+1
  for /l %%j in (!num1!,1,14) do (
    set/a num2=%%j+1
    for /l %%k in (!num2!,1,15) do (
    call :out %%i %%j %%k
    )
  )
)
echo 一共%num%组&echo.&echo 分组排列情况如下:
:loop
for /f "tokens=1 delims=-=" %%i in ('set -') do (
  set flag=0
  for %%j in (%%i) do (
  if not defined .%%j set/a flag+=1
  )
  if !flag!==3 (set/p=%%i  <nul&set -%%i=&for %%j in (%%i) do (set .%%j=ok))
)
echo.&for /l %%i in (1,1,15) do set .%%i=
set/a flag1+=1&if not !flag1!==7 goto :loop
echo.&echo 未能加入分组的项目:
set -
pause>nul

:out
set flag=0
for %%i in (%1 %2 %3) do (
  for %%j in (%1 %2 %3) do (
  if not %%i==%%j if not defined %%i_%%j set/a flag+=1)
  )
)
if %flag% lss 6 goto :eof
set/a num+=1&echo %1-%2-%3&set -%1,%2,%3=ok
for %%i in (%1 %2 %3) do (
  for %%j in (%1 %2 %3) do (
  if not %%i==%%j set %%i_%%j=ok
  )
)


2008-6-24 18:26
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 10 楼』:  

真是无心插柳柳成阴,在绝望的时候乱来一气,居然成了。。。
代码中的大写那一行可谓神来之笔,也是无意所得。正宗的瞎猫遇到死耗子。。呵呵。。
初步测试好像是没问题,欢迎大家测试。。
@echo off&setlocal enabledelayedexpansion
set "var1=a b c d e f g h i j k l m n o"
for %%a in (一 二 三 四 五 六 日) do (
    set /a xx+=1&set ".!xx!=%%a"
)
for %%a in (!var1!) do (
   set "var2=!var1:%%a=!"
   for %%b in (!var2!) do (
      set "var3=!var2:%%b=!"
      for %%c in (!var3!) do (
         if not defined %%a.%%b if not defined %%b.%%a (
            if not defined %%a.%%c if not defined %%c.%%a (
               if not defined %%b.%%c if not defined %%c.%%b (
               set "num=%%a.%%b %%b.%%a %%a.%%c %%c.%%a %%b.%%c %%c.%%b"
               for %%i in (!num!) do set %%i=a
               set /a nnn+=1
               set "..%%a=!..%%a! %%a-%%b-%%c"
))))))
FOR %%B IN (!..A!) DO SET "..A2=%%B !..A2!"
echo  !..A2!
for %%a in (b c d e f g) do echo !..%%a!
echo  共 !nnn! 组
echo.&echo.
for %%a in (!..a2!) do (
   set "str=%%a"
   set /a xq+=1
   for %%c in (b c d e f g) do call :loop %%c
   call echo  星期%%.!xq!%%   %%a!max!
   set "max="
)
echo.&pause
:loop
set "str=!str! !max!"
set "str=!str:-= !"
for %%d in (!..%1!) do (
   set "num=%%d"
   for %%e in (!str!) do set "num=!num:%%e=!"
   if not "!num:~4,1!"=="" (
      set "max=!max! %%d"
      set "..%1=!..%1:%%d=!"
      goto :eof
))
goto :eof
[ Last edited by 26933062 on 2008-6-25 at 08:02 AM ]

   此帖被 +25 点积分         点击查看详情   
评分人:【 WANKOILZ 分数: +2  时间:2008-6-25 12:32
评分人:【 bat-zw 分数: +15  时间:2008-6-25 12:32
评分人:【 moniuming 分数: +8  时间:2008-6-25 19:57




致精致简!
2008-6-25 05:29
查看资料  发短消息 网志   编辑帖子  回复  引用回复
WANKOILZ
初级用户





积分 198
发帖 89
注册 2007-9-6
来自 重庆
状态 离线
『第 11 楼』:  

楼上的测试没问题,而且代码很NB。不知道我的为什么分组不成功............

2008-6-25 12:36
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 12 楼』:  

高,好高,确实高,实在是高,不可谓不高,惊世骇俗的高!
学,真学,仔细学,虚心求学,扎扎实实学,永无止境地学。



批处理之家新域名:www.bathome.net
2008-6-25 12:48
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
WANKOILZ
初级用户





积分 198
发帖 89
注册 2007-9-6
来自 重庆
状态 离线
『第 13 楼』:  

我欲哭无泪,在看了 26933062兄 的代码后终于发现之所以排列不成功是因为set -这句的输出顺序不对头。换了一下set的顺序(sort/r)后,惊奇地发现可以了,真是神奇,我郁闷很久了.......:
@echo off&setlocal enabledelayedexpansion
for /l %%i in (1,1,13) do (
  set/a num1=%%i+1
  for /l %%j in (!num1!,1,14) do (
    set/a num2=%%j+1
    for /l %%k in (!num2!,1,15) do (
    call :out %%i %%j %%k
    )
  )
)
echo.&echo 一共%num%组&echo.&echo 分组排列情况如下:
for /f "tokens=1 delims=-=" %%i in ('set -01^|sort/r') do (
  set/p=%%i  <nul&set -%%i=&for %%j in (%%i) do (set .%%j=ok)
  for /f "tokens=1 delims=-=" %%j in ('set -') do (
  set flag=0
  for %%k in (%%j) do if not defined .%%k set/a flag+=1
  if !flag!==3 (set/p=%%j  <nul&set -%%j=&for %%k in (%%j) do (set .%%k=ok))
  )
  echo.&for /l %%i in (1,1,15) do (set str=0%%i&set str=!str:~-2!&set .!str!=)
)

pause>nul

:out
set flag=0
for %%i in (%1 %2 %3) do (
  for %%j in (%1 %2 %3) do (
  if not %%i==%%j if not defined %%i_%%j set/a flag+=1)
  )
)
if %flag% lss 6 goto :eof
set/a num+=1
set str1=0%1&set str2=0%2&set str3=0%3&set str1=!str1:~-2!&set str2=!str2:~-2!&set str3=!str3:~-2!
echo !str1!-!str2!-!str3!&set -!str1!,!str2!,!str3!=ok
for %%i in (%1 %2 %3) do (
  for %%j in (%1 %2 %3) do (
  if not %%i==%%j set %%i_%%j=ok
  )
)
[ Last edited by WANKOILZ on 2009-7-29 at 02:43 ]

   此帖被 +8 点积分        点击查看详情   
评分人:【 moniuming 分数: +8  时间:2008-6-25 19:57


2008-6-25 13:41
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: