标题: 【练习-043】批处理找出文本中的重复数值并计算出现次数 [打印本页]
作者: batman 时间: 2009-4-14 21:39 标题: 【练习-043】批处理找出文本中的重复数值并计算出现次数
&&有文本a.txt里全是正整数数字,内容如下:- 4 7 25 48 10 32 4 43 45 38
- 4 19 37 5 23 47 11 30 18 40
- 37 16 37 10 9 19 1 30 42 6
- 28 26 21 24 45 25 28 48 10 9
- 32 20 34 33 38 42 1 19 15 42
- 26 10 29 29 12 13 19 31 3 25
- 36 6 18 43 17 23 33 43 49 39
- 17 20 39 49 14 43 46 16 2 14
- 25 4 24 18 18 1 15 33 47 11
- 43 11 23 2 25 9 25 0 46 4
- 32 40 26 4 44 3 25 24 1 43
- 18 25 16 25 13 14 38 2 24 15
- 19 38 3 4 40 15 19 30 7 38
- 35 15 5 42 37 21 43 22 31 42
- 30 10 43 20 30 36 27 11 9 13
- 11 33 0 28 5 14 25 5 43 26
- 21 49 44 12 30 46 30 45 0 15
- 6 5 33 32 9 7 13 8 24 17
- 41 34 42 47 39 37 25 39 4 39
- 22 17 32 16 49 15 10 23 26 36
复制代码
要求用批处理找出最大的数值,并列出重复次数最多的数字及其出现次数。
满分10分,视情况加分(以思路为重)。
注:
1、并不知道数值的大小范围;
2、此题请先留给新人们发挥。
作者: keen 时间: 2009-4-14 22:49
只会求出最大的数:- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%i in (a.txt) do (
- for %%j in (%%i) do set /a n+=1&set a!n!=%%j
- )
- set max=0
- :lp
- set /a m+=1
- if %m%==%n% goto end
- if !a%m%! geq %max% (set max=!a%m%!&goto lp) else (set max=%max%&goto lp)
- :end
- echo 最大的数是%max%
- pause
复制代码
作者: rat 时间: 2009-4-14 23:45
- @echo off
- setlocal enabledelayedexpansion
- set max=0
- for /f "delims=" %%a in (a.txt) do (
- for %%b in (%%a) do (
- if %%b gtr !max! set max=%%b
- set/a_%%b+=1
- )
- )
- echo Max: %max%
-
- set max=0
- for /f "tokens=1,2 delims=_=" %%a in ('set _') do (
- if %%b gtr !max! set max=%%b
- )
- for /f "tokens=1,2 delims=_=" %%a in ('set _') do (
- if %%b equ %max% echo Number: %%a, Count: %%b
- )
- pause
复制代码
[ 本帖最后由 rat 于 2009-4-14 23:47 编辑 ]
作者: batman 时间: 2009-4-14 23:51
修改下二楼的:- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in (a.txt) do (
- for %%b in (%%a) do (
- if not defined max set /a max=%%b
- if !max! lss %%b set /a max=%%b
- )
- )
- echo 最大数为:%max%&pause>nul
复制代码
作者: tireless 时间: 2009-4-15 00:48
if not defined max set /a max=%%b 这句不要也行。
不过感觉有些奇怪 ——- @echo off&setlocal enabledelayedexpansion
- echo !max!
- if 1 gtr !max! set max=1
- echo %max%
- pause
复制代码
结果是:
ECHO 处于关闭状态。
1
请按任意键继续. . .
作者: GodInHell 时间: 2009-4-15 11:16
- @echo off
- Setlocal Enabledelayedexpansion
- set /a most=1,max=1
- for /f "delims=" %%a in (a.txt) do (
- for %%i in (%%a) do (
- set /a _%%i+=1
- if !_%%i! gtr !most! (set most=!_%%i!&set num=%%i)
- if %%i gtr !max! set max=%%i
- )
- )
- echo.出现最多的是:!num! 出现次数为:!most! 最大数是:!max!&pause
复制代码
作者: someone 时间: 2009-4-15 15:36 标题: 稍稍修改了下六楼的
- @echo off
- Setlocal Enabledelayedexpansion
- set /a most=0,max=0
- for /f "delims=" %%a in (a.txt) do (
- for %%i in (%%a) do (
- set /a _%%i+=1
- if !_%%i! gtr !most! set most=!_%%i!&set num=%%i
- if !_%%i! gtr !most! set num=!num! %%i
- if %%i gtr !max! set max=%%i
- )
- )
- echo.出现最多的是:!num! 出现次数为:!most! 最大数是:!max!&pause>nul
复制代码
作者: keen 时间: 2009-4-15 16:26
六楼的强!
想问一下, _%%i 中下划线的作用,是标识符嘛,是的话,别的符号可以不?
作者: Batcher 时间: 2009-4-15 16:34 标题: 回复 8楼 的帖子
没有什么特殊含义,只是变量名的一个组成部分而已,可以换成别的符号。
作者: rat 时间: 2009-4-15 23:32
6L的不能处理同时出现最多次的多个数的情况;7L貌似有这个解决的意图,但改得不对
作者: 随风 时间: 2009-4-16 04:34
是否应该扩展下此题
1、显示最大的数及它出现的次数
2、显示出现最多的数及它出现的次数
3、需考虑出现最多的数不止一个数的情况,
比如:假设出现最多数次数为3次,分别是 20 50 80 90,最大的数是120出现2次。
则显示:
最大的数是 120 共出现 2 次
出现次数最多的为 3 次,分别是 20 50 80 90
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |