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

[其他] [已解决]批处理删除给定数字串的一部分使剩余数字升序或降序排列

偶尔看到这一个问题
例子:
  1. 1 2 55 3 4 5 1 7 8 9
  2. 然后结果是
  3. 删去 55 1
  4. 或者直接给出排列好的数列 1 2 3 4 5 7 8 9
复制代码
如果用数直接比对以前的数 那效率一定很低 这里求代码的简约 高效
大家有什么好的方案
注:
数字不能换位子
例如 1 2 3 4 5 6 10 9
答案应为 1 2 3 4 5 6 9
而不是1 2 3 4 5 6 9 10
8L的说得对
基础的 那只要求以第一个数为基准 给出一种答案就可以了 但升序的数组不可以有遗留哦
也就是本来可以1 2 3 4 5 6 9的 不能少数字 变成 1 3 4 5 6 9或其他的
加深的:
找出删去数最少 也就是令这个升序数组最长的答案

[ 本帖最后由 基拉freedom 于 2009-10-2 20:41 编辑 ]
1

评分人数

    • Batcher: 感谢主动给标题标注[已解决]字样PB + 2
o(∩_∩)o...~~~
空间:http://hi.baidu.com/fair_jm
喜欢批处理的没事的话去逛逛哦~~

但这样怎么实现呢
因为排序后位置都改变了 怎么能知道要删除去的是那个数呢?
o(∩_∩)o...~~~
空间:http://hi.baidu.com/fair_jm
喜欢批处理的没事的话去逛逛哦~~

TOP

第二个不好 不满足 不能换数字的位置 只能删
第一个也一样不行
例如 改一下
set "str=1 2 55 3 4 5 6 7 8 10 9"
他的输出居然是
1 2 3 4 5 6 7 8 9 10
输入的10可是在9前面的.........还得再想想
o(∩_∩)o...~~~
空间:http://hi.baidu.com/fair_jm
喜欢批处理的没事的话去逛逛哦~~

TOP

是排序
但数字的位置不能变
只能删除其中的数字 让剩下的呈升序排列
我没说清楚 对不起了
o(∩_∩)o...~~~
空间:http://hi.baidu.com/fair_jm
喜欢批处理的没事的话去逛逛哦~~

TOP

恩 ls说的对
所以这里只要求给出一种就可以了
即以第一个数为基准
o(∩_∩)o...~~~
空间:http://hi.baidu.com/fair_jm
喜欢批处理的没事的话去逛逛哦~~

TOP

54 56
其实题目可以加深 例如求删除最少的数 输出最长的
可惜我还没怎么想出来 哎
o(∩_∩)o...~~~
空间:http://hi.baidu.com/fair_jm
喜欢批处理的没事的话去逛逛哦~~

TOP

传说中 题目变成最简单的了
只需找出就好了
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /p a=输入一串数字
  4. set n=1
  5. for %%i in (%a%) do (
  6. set _!n!=%%i
  7. set /a n=!n!+1
  8. )
  9. set x=0
  10. set max=%_1%
  11. set /p=%max% <nul
  12. for /l %%i in (2 1 !n!-1) do (
  13. set /a "x=_%%i-max"
  14. if !x! gtr 0 set /p=!_%%i! <nul & set max= &set max=!_%%i!
  15. )
  16. pause
复制代码
其实原意是要向8L那样的 然后举出最长的数列....那个才是最难得 哎
o(∩_∩)o...~~~
空间:http://hi.baidu.com/fair_jm
喜欢批处理的没事的话去逛逛哦~~

TOP


分割好了
还要慢慢理解
代码有点不太完美 不过也差不多了
很是感谢 这个问题是偶尔从书中找到的 只要叫我们自己找找
测试了一下
23 12 14 15 16 17 18 19 4564 213 456 123 456 789 56 231
12 14 15 16 17 18 19 213 231
最长的数列其实应为
12 14 15 16 17 18 19 123(或213) 456 789
o(∩_∩)o...~~~
空间:http://hi.baidu.com/fair_jm
喜欢批处理的没事的话去逛逛哦~~

TOP

思路看懂了
看来代码必须多研究才可以
再次说声谢谢 你的代码是找此数列中大小相近(我也说不大清楚)的数列吧 很不错的思路
分割好的:
  1. @echo off&setlocal enabledelayedexpansion
  2. set/p k=请输入数字:
  3. set i=1
  4. for %%i in (%k%) do (
  5. set /a i+=1
  6. set m=0
  7. set "r="
  8. for /l %%j in (1,1,!i!) do (
  9. if !e%%j! lss %%i if !m! lss !l%%j! set m=!l%%j!&set "r=!r%%j!"
  10. )
  11. set "r!i!=!r! %%i"
  12. set/a "l!i!=m+1"
  13. set e!i!=%%i
  14. )
  15. @echo !r%i%!
  16. pause
复制代码

[ 本帖最后由 基拉freedom 于 2009-10-2 21:24 编辑 ]
1

评分人数

o(∩_∩)o...~~~
空间:http://hi.baidu.com/fair_jm
喜欢批处理的没事的话去逛逛哦~~

TOP

回27楼的.......我才高中 只是对这种算法好奇而已
我还得多学习多学习
o(∩_∩)o...~~~
空间:http://hi.baidu.com/fair_jm
喜欢批处理的没事的话去逛逛哦~~

TOP


我再想想
DP没学过 算法接触很少 现在连个回溯都搞不清楚 惭愧啊 惭愧
o(∩_∩)o...~~~
空间:http://hi.baidu.com/fair_jm
喜欢批处理的没事的话去逛逛哦~~

TOP

裁开的代码
中间觉得多余的地方改了改 不知道有没有改错:
  1. @echo off&setlocal enabledelayedexpansion
  2. set/pk=
  3. set i=1
  4. for %%i in (%k%) do (
  5. set/a i+=1
  6. set m=0
  7. set r=
  8. for /l %%j in (2,1,!i!-1) do (
  9. if !e%%j! lss %%i if !m! lss !l%%j! set m=!l%%j!&set r=!r%%j!
  10. )
  11. set r!i!=!r! %%i
  12. set/a l!i!=m+1
  13. set e!i!=%%i
  14. )
  15. set m=!l1!
  16. set r=!r1!
  17. for /l %%i in (2,1,!i!) do if !m! lss !l%%i! set m=!l%%i!&set r=!r%%i!
  18. echo%r%
  19. pause
复制代码
o(∩_∩)o...~~~
空间:http://hi.baidu.com/fair_jm
喜欢批处理的没事的话去逛逛哦~~

TOP

因为
l1和r1的值为空 比较后 赋的值的也是空
不知道这样理解有没有错
1

评分人数

    • Seter: 没想到set/ai+=1的位置放错了会造成这种结果 ...PB + 1
o(∩_∩)o...~~~
空间:http://hi.baidu.com/fair_jm
喜欢批处理的没事的话去逛逛哦~~

TOP

返回列表