中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [讨论][共同参与]求表格中数的规律[挑战分割法算法极限]
« [1] [2] »
作者:
标题: [讨论][共同参与]求表格中数的规律[挑战分割法算法极限] 上一主题 | 下一主题
qjbm
初级用户





积分 125
发帖 44
注册 2007-1-24
状态 离线
『楼 主』:  [讨论][共同参与]求表格中数的规律[挑战分割法算法极限]

表格如下:


1 1 组合为  1
1 2 组合为  1
1 3 组合为  1
.........
2 2 组合为  2
2 3 组合为  3
2 4            4
..........
3 3           6
3 4          10
3 5          15
...........
9 9          12870

请问:        
13 15 组合为 多少?
--------------------------------------------
下面的代码不是用来描述表格规律的,但是可以用做验证结果.
计算速度太慢,这正是为什么要求表格规律的原因.
@ECHO %DBG% OFF
SETLOCAL ENABLEDELAYEDEXPANSION

:SETUP
SET /P ONE=输入第一个数:           & IF NOT DEFINED ONE EXIT /B
SET /P TWO=输入第二个数:           & IF NOT DEFINED TWO EXIT /B
SET /A ZS=1,ZHE=%ONE%+%TWO%-1
SET /A ZD=%ZHE%-(%ONE%-1)*%ZS%,f=0,g=%ONE%-1,j=%ONE%-2
FOR /L %%i IN (1,1,%ONE%) DO (SET /A R%%i=!ZS!) & SET /A R%ONE%=!ZD!

:MAIN
CALL :PRI & IF %R1%==%ZD% (ECHO %ONE% %TWO% 组合值为: !f! & GOTO :EOF)
IF !R%ONE%!==%ZS% (
                  CALL :GUI & CALL :JIN & CALL :ADD
                  SET /A R%ONE%=%ZHE%-!h!,j=%ONE%-2
                  GOTO :MAIN
                  )
SET /A R%ONE%-=1,R%g%+=1
GOTO :MAIN

:PRI
SET /A f+=1
CLS & ECHO 第        !f!        次计算
GOTO :EOF

:GUI
FOR /L %%i IN (%j%,1,%g%) DO (IF %%i GTR %j% SET /A R%%i=%ZS%)
GOTO :EOF

:JIN
SET /A R%j%+=1
CALL :ADD
SET /A h=%h%+(%ZS%-1)
IF %h%==%ZHE% (SET /A j-=1 & CALL :GUI & CALL :JIN)
GOTO :EOF

:ADD
SET /A h=0
FOR /L %%i IN (1,1,%g%) DO (SET /A h+=!R%%i!)
GOTO :EOF
引发问题相关帖:
http://www.cn-dos.net/forum/viewthread.php?tid=26911&fpage=4
本贴若代码化图表规律计算式,
则可在进行 所有可行性条件列举 前得所有可行性条件总和.

[ Last edited by qjbm on 2007-2-5 at 12:28 AM ]

附件 1: fgf.jpg (2007-2-5 11:39, 65.88 K, 下载附件所需积分 1 点 ,下载次数: 5)


附件 2: plzh.bmp (2007-2-5 13:28, 67.85 K, 下载附件所需积分 1 点 ,下载次数: 7)


2007-2-5 10:18
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
scriptor
银牌会员




积分 1187
发帖 555
注册 2006-12-21
状态 离线
『第 2 楼』:  

你这个居然是杨辉三角

那么规律就很明显了

哈哈哈

2007-2-5 12:52
查看资料  发短消息 网志   编辑帖子  回复  引用回复
qjbm
初级用户





积分 125
发帖 44
注册 2007-1-24
状态 离线
『第 3 楼』:  正是杨辉三角

正是杨辉三角

正在考虑批处理是否可以实现nCr函数功能.

节省资源,在楼上回了,

nCr和nPr计算是排列组合(分割法)相关,与帕斯卡三角形有直接关系.

有的同学会很纳闷的问,排列组合(分割法)与帕斯卡三角形有什么关系?

总范围 - 平均底限*组数 与 方法数  的关系 正是帕斯卡三角形

也就是说,在求分割法时,我可以屏弃以前的nCr和nPr计算,而利用帕斯卡三角形

直接得出结果.

相关资料:
http://www.dsej.gov.mo/~webdsej/www_gtrc/course/Senior/SMath2.htm
第6章

[ Last edited by qjbm on 2007-2-6 at 08:08 PM ]

2007-2-5 13:05
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
scriptor
银牌会员




积分 1187
发帖 555
注册 2006-12-21
状态 离线
『第 4 楼』:  

实现nCr函数功能?

这个和那个有关??

请问你想要什么??

2007-2-5 14:41
查看资料  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 5 楼』:  

  做了个15×15的表格出来,至于要实现指定的功能,请自行修改——BTW,此方法会设置大量的变量,并且排版只限于9个以下的数字,局限性是比较大的:
@echo off
setlocal enabledelayedexpansion
mode con cols=170
set /p=┌──<nul
for /l %%i in (1,1,14) do set /p=──┬──<nul
set /p=──┐<nul
echo.

:loop
call :creat_num
set /p=├──<nul
for /l %%i in (1,1,14) do set /p=──┼──<nul
set /p=──┤<nul
echo.
if %lines% lss 14 goto loop
call :creat_num
set /p=└──<nul
for /l %%i in (1,1,14) do set /p=──┴──<nul
set /p=──┘<nul
echo.
pause
exit

:creat_num
set /a lines+=1
for /l %%i in (1,1,15) do (
    if !lines! equ 1 (
        set num!lines!_%%i=1
    ) else (
        if %%i equ 1 (
            set num!lines!_%%i=1
        ) else (
             set /a SN1=!lines!-1
             set /a SN2=%%i-1
             call set /a num!lines!_%%i=%%num!SN1!_%%i%%+%%num!lines!_!SN2!%%
        )
    )
    call set num=        %%num!lines!_%%i%%
    set num=!num:~-8!
    if %%i leq 2 (
        set /p=│!num!<nul
    ) else (
        if %%i geq !lines! (
            set /p=│!num!<nul
        ) else (
            set /p=│        <nul
        )
    )
)
set /p=│<nul
echo.
goto :eof


   此帖被 +33 点积分        点击查看详情   
评分人:【 ccwan 分数: +9  时间:2007-2-5 21:10
评分人:【 redtek 分数: +15  时间:2007-2-5 21:19
评分人:【 jmz573515 分数: +4  时间:2007-2-6 00:51
评分人:【 online365 分数: +2  时间:2007-2-6 05:43
评分人:【 oilio 分数: +3  时间:2007-2-24 23:52




尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2007-2-5 15:20
查看资料  发短消息 网志   编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 6 楼』:  

太精彩了~~

而且昨天发的帖子居然论坛上显示有:17122人浏览过此帖,1天就有1万7千多人浏览,破纪录了~:)



    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2007-2-5 22:57
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 7 楼』:  

还没有看到规律

2007-2-5 23:10
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 8 楼』:  



  Quote:
Originally posted by redtek at 2007-2-5 09:57:
而且昨天发的帖子居然论坛上显示有:17122人浏览过此帖,1天就有1万7千多人浏览,破纪录了~:)

  再看看精华帖里的“ 无奈何签名代码略析 ”,居然只有40次的浏览量,看来论坛的计数器是发生了一点错乱。

  5楼的代码还有一个致命的缺陷:因为涉及到数值的运算,所以,不能处理两数之和超过2^31-1的情况。



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2007-2-5 23:14
查看资料  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 9 楼』:  



  Quote:
Originally posted by vkill at 2007-2-5 10:10:
还没有看到规律

  这是一个杨辉三角的正方形表格形式,杨辉三角的规律是:某个数字等于它两肩上的两个数字之和。具体到这个表格中,就是某个数字等于同一行前一列的数与前一行同一列的数之和。



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2007-2-5 23:18
查看资料  发短消息 网志   编辑帖子  回复  引用回复
无奈何
荣誉版主





积分 1338
发帖 356
注册 2005-7-15
状态 离线
『第 10 楼』:  



  Quote:
Originally posted by namejm at 2007-2-5 23:14:

  再看看精华帖里的“ 无奈何签名代码略析 ”,居然只有40次的浏览量,看来论坛的计数器是发生了一点错乱。

这个帖子的点击会如此高,是不是有人刷点击,或者进行过帖子合并等版务管理?

willsort 兄发的那个帖子,是我操作失误造成的,将另一个帖子归并到此贴时顺序错了。重新分割后造成 ID 改变,点击数丢失。

[ Last edited by 无奈何 on 2007-2-6 at 02:06 AM ]



  ☆开始\运行 (WIN+R)☆
%ComSpec% /cset,=何奈无── 。何奈可无是原,事奈无做人奈无&for,/l,%i,in,(22,-1,0)do,@call,set/p= %,:~%i,1%<nul&ping/n 1 127.1>nul

2007-2-6 00:40
查看资料  发送邮件  发短消息 网志  OICQ (105400208)  编辑帖子  回复  引用回复
20080610
初级用户





积分 83
发帖 34
注册 2006-11-24
状态 离线
『第 11 楼』:  

明显被刷过点击....

2007-2-6 02:44
查看资料  发短消息 网志   编辑帖子  回复  引用回复
electronixtar
铂金会员





积分 7493
发帖 2672
注册 2005-9-2
状态 离线
『第 12 楼』:  

有的人不想混了......以为联盟没有人了说?




C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
2007-2-7 00:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qjbm
初级用户





积分 125
发帖 44
注册 2007-1-24
状态 离线
『第 13 楼』:  

5楼 namejm的代码对排版的控制相当精彩.
call set /a num!lines!_%%i=%%num!SN1!_%%i%%+%%num!lines!_!SN2!%%
也正是描述杨辉三角的:除了斜边为1的数之外其他都是他肩上两个数字之和的规律.

但是我想要计算的规律或者应该说通项公式是:

在矩形列表形式描述下,仅利用纵横坐标求相交点值.

节省..在楼上回了.---

...............看样子是我的表达能力有点问题.

递加的不算.....

[ Last edited by qjbm on 2007-2-6 at 08:25 PM ]

2007-2-7 08:38
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 14 楼』:  



  Quote:
Originally posted by qjbm at 2007-2-6 19:38:
但是我想要计算的规律或者应该说通项公式是:

在矩形列表形式描述下,仅利用纵横坐标求相交点值.  

  我说过,自行修改就可以达到目的,其实修改起来是很容易的事情,以下代码加入了简单的出错检测,请配合5楼的代码使用:
@echo off
setlocal enabledelayedexpansion

:begin
cls
set lines=0
set input=
set /p input=  请输入以空格分隔的行数和列数(比如3 6):
call :loop %input%

:loop
if %1 gtr %2 goto begin
if %2 gtr 17 goto begin
set /a lines+=1
for /l %%i in (1,1,%2) do (
    if !lines! equ 1 (
        set num!lines!_%%i=1
    ) else (
        if %%i equ 1 (
            set num!lines!_%%i=1
        ) else (
             set /a SN1=!lines!-1
             set /a SN2=%%i-1
             call set /a num!lines!_%%i=%%num!SN1!_%%i%%+%%num!lines!_!SN2!%%
             call set num=%%num!lines!_%%i%%
        )
    )
)
if %lines% lss %1 goto loop
cls
echo.&echo.&echo.
echo      在这个表格中,第 %1 行第 %2 列上的数字为 %num%
echo.
pause
goto begin




尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2007-2-7 09:21
查看资料  发短消息 网志   编辑帖子  回复  引用回复
scriptor
银牌会员




积分 1187
发帖 555
注册 2006-12-21
状态 离线
『第 15 楼』:  

被你先写了代码

那天我刚好回家了
又不能上网

今天我贴出来
看一看
评一评

呵呵....

2007-2-24 11:06
查看资料  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: