[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
我的理解  前面几个应该就是 你所谓的3分法吧

TOP

回复 31# terse

二十一楼就是三分法。

TOP

按我理解,就是下面这意思:
假设总行数n,列数l,则行数h=n/l,余数y=n%%l
一、当余数y=0,则直接输出。
二、  余数y>0,则:
                1、l大于h,则前y列各加一行为h+1,后l-y列为h行
                2、l小于等于h,则前l-1列各加一行为h+1,余者为最后一列即n-(l-1)*(h+1)行

改下代码半小时不到,理解楼主的意思花了两天最后还是靠瞎猜出来的。
初学BAT,非专业。代码不适当之处还望前辈们多多指点。在此表示感谢!

TOP

回复 33# xxpinqz

是这个意思。但我没有按写程序的方式来表达,让你费心了。请原谅。

TOP

回复 34# pan528
难道 我26楼代码 只能2分或者3分吗?
应该两则都兼容

TOP

回复 35# terse


我试了一下,26楼的代码只能二分法,21楼的代码是三分法。

TOP

回复 36# pan528
26楼代码 将if !j! leq 0 set j=n  改 set j=n 试下
应该这样了

TOP

我早先是靠测试弄懂了楼主的规则,但是没有好的思路,想法太繁琐,应该有更好的就题解题算法,目测 plp626 能手到擒来

TOP

我目前 最直观的解  set /a 行=(总行+列-1)/列,余=(总行%%列)*行
得到 行 和 余的值
只要在 FOR 循环  判断总行 和 余 关系 应该够解了吧

TOP

回复 39# terse
话说我的数学就是加减乘除 ,所以算法吃不透,目测26楼代码是按输完一列再接着输下一列的按顺序输出
所以判断是否所谓三分也应该要用n/l来判断,而非0。
扯了3页,就下面两句是亮点:
8楼的set /a 行数=(n+列数-1)/ 列数
26楼的set /a "m=(%%i--~j)%%_i+1"
向两位高手致敬~~
初学BAT,非专业。代码不适当之处还望前辈们多多指点。在此表示感谢!

TOP

回复 40# xxpinqz
再仔细回看前面 猜真这次应该理解了
先粗糙一个
感觉代码写得太啰嗦   等下再看有 优化的可能不
  1. @echo off&setlocal enabledelayedexpansion
  2. %1 %0 REM|more /t32 >n.txt
  3. set L=5
  4. set "file=a1.txt"
  5. for /f "delims=U" %%a in ('cmd /u /c echo 唉') do set "tab=%%a"
  6. for /f "usebackq tokens=*" %%i in ("%file%") do set /a N+=1&set #!N!=%%i
  7. set /a h=(n+l-1)/l,j=n,i=1
  8. if !h! lss !l! set /a j=(n%%l)*H
  9. for /l %%i in (1 1 %n%) do (
  10.     set /a "t=^!^!(~-%%i/j)"
  11.     set /a "m=(~-%%i-(t*j))%%(~-H+i*^!t)+1"
  12.     for %%j in (!m!) do set "$%%j=!$%%j!%tab%!#%%i!"
  13. )
  14. for /l %%i in (1 1 %h%) do for /f "tokens=*" %%j in ("!$%%i!") do echo %%j
复制代码

TOP

唉 惭愧我的理解力  但楼主的表达也太那个了  
都和我一样 国语学得不好

TOP

回复 41# terse

测试通过!是三分法。不过最后多了一个回车,不知问题出在哪?

TOP

你是指最后的回车行是MORE留下的吧
代码再少点变量
另补上exit
  1. @echo off&setlocal enabledelayedexpansion
  2. %1 %0 :|more /t32 >n.txt&exit
  3. set L=9
  4. set "file=a.txt"
  5. for /f "delims=U" %%a in ('cmd /u /c echo 唉') do set "tab=%%a"
  6. for /f "usebackq tokens=*" %%i in ("%file%") do set /a N+=1&set #!N!=%%i
  7. set /a h=(n+l-1)/l,j=n
  8. if !h! lss !l! set /a j=(n%%l)*h
  9. for /l %%i in (1 1 %n%) do (
  10.     set /a "i=^!(~-%%i/j),m=(~-%%i-(^!i*j))%%(~-H+i)+1"
  11.     for %%j in (!m!) do set "$%%j=!$%%j!%tab%!#%%i!"
  12. )
  13. for /l %%i in (1 1 %h%) do for /f "tokens=*" %%j in ("!$%%i!") do echo %%j
复制代码

TOP

回复 44# terse

回车没有剔除,我还发现一个新问题:所有代码在34/9时都变成了二分法!即:
1    5    9    13   17   21   25   29   32
2    6    10   14   18   22   26   30   33
3    7    11   15   19   23   27   31   34
4    8    12   16   20   24   28
而三分法应为:
1    5    9    13   17   21   25   29   33
2    6    10   14   18   22   26   30   34
3    7    11   15   19   23   27   31
4    8    12   16   20   24   28   32
我怀疑是算法有问题。
各位高手找找原因吧。

TOP

返回列表