中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-14 19:05
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [讨论][共同参与]求表格中数的规律[挑战分割法算法极限]
楼 主 [讨论][共同参与]求表格中数的规律[挑战分割法算法极限] 发表于 2007-02-05 10:18 ·  中国 山东 济南 电信
初级用户
积分 125
发帖 44
注册 2007-01-24 15:31
UID 77555
性别 女
状态 离线
表格如下:


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 ]
附件
fgf.jpg
plzh.bmp
2 发表于 2007-02-05 12:52 ·  中国 北京 中国科学院研究生院
银牌会员
★★★
积分 1,187
发帖 555
注册 2006-12-21 07:35
UID 74129
性别 男
状态 离线
你这个居然是杨辉三角

那么规律就很明显了

哈哈哈
3 正是杨辉三角 发表于 2007-02-05 13:05 ·  中国 山东 济南 电信
初级用户
积分 125
发帖 44
注册 2007-01-24 15:31
UID 77555
性别 女
状态 离线
正是杨辉三角

正在考虑批处理是否可以实现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 ]
4 发表于 2007-02-05 14:41 ·  中国 北京 中国科学院研究生院
银牌会员
★★★
积分 1,187
发帖 555
注册 2006-12-21 07:35
UID 74129
性别 男
状态 离线
实现nCr函数功能?

这个和那个有关??

请问你想要什么??
5 发表于 2007-02-05 15:20 ·  中国 广东 电信
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
UID 51697
来自 成都
状态 离线
  做了个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
本帖最近评分记录 (共 5 条) 点击查看详情
评分人分数时间
ccwan +9 2007-02-05 21:10
redtek +15 2007-02-05 21:19
jmz573515 +4 2007-02-06 00:51
online365 +2 2007-02-06 05:43
oilio +3 2007-02-24 23:52
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
6 发表于 2007-02-05 22:57 ·  中国 北京 朝阳区 联通
金牌会员
★★★★
积分 2,902
发帖 1,147
注册 2006-09-21 12:00
UID 63324
性别 男
状态 离线
太精彩了~~

而且昨天发的帖子居然论坛上显示有:17122人浏览过此帖,1天就有1万7千多人浏览,破纪录了~:)
    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
7 发表于 2007-02-05 23:10 ·  中国 甘肃 兰州 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
还没有看到规律
8 发表于 2007-02-05 23:14 ·  中国 广东 电信
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
UID 51697
来自 成都
状态 离线
Originally posted by redtek at 2007-2-5 09:57:
而且昨天发的帖子居然论坛上显示有:17122人浏览过此帖,1天就有1万7千多人浏览,破纪录了~:)

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

  5楼的代码还有一个致命的缺陷:因为涉及到数值的运算,所以,不能处理两数之和超过2^31-1的情况。
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
9 发表于 2007-02-05 23:18 ·  中国 广东 电信
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
UID 51697
来自 成都
状态 离线
Originally posted by vkill at 2007-2-5 10:10:
还没有看到规律

  这是一个杨辉三角的正方形表格形式,杨辉三角的规律是:某个数字等于它两肩上的两个数字之和。具体到这个表格中,就是某个数字等于同一行前一列的数与前一行同一列的数之和。
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
10 发表于 2007-02-06 00:40 ·  中国 北京 中移铁通
荣誉版主
★★★
积分 1,338
发帖 356
注册 2005-07-15 12:09
UID 40733
性别 男
状态 离线
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

11 发表于 2007-02-06 02:44 ·  中国 北京 朝阳区 联通
初级用户
积分 83
发帖 34
注册 2006-11-24 10:50
UID 71574
性别 男
状态 离线
明显被刷过点击....
12 发表于 2007-02-07 00:42 ·  中国 四川 绵阳 电信
铂金会员
★★★★
积分 7,493
发帖 2,672
注册 2005-09-02 00:00
UID 42173
性别 男
状态 离线
有的人不想混了......以为联盟没有人了说?

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'>"
13 发表于 2007-02-07 08:38 ·  中国 山东 济南 电信
初级用户
积分 125
发帖 44
注册 2007-01-24 15:31
UID 77555
性别 女
状态 离线
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 ]
14 发表于 2007-02-07 09:21 ·  中国 广东 电信
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
UID 51697
来自 成都
状态 离线
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没商量。
考虑问题复杂化,解决问题简洁化。
15 发表于 2007-02-24 11:06 ·  中国 北京 联通
银牌会员
★★★
积分 1,187
发帖 555
注册 2006-12-21 07:35
UID 74129
性别 男
状态 离线
被你先写了代码

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

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

呵呵....
论坛跳转: