|
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 |
|
|
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 来自 重庆
状态 离线
|
|
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
状态 离线
|
|
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 |
|
|
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 ]
|
|
2008-6-25 13:41 |
|