Board logo

标题: 向大家征集『新手练功区』批处理新手题目 [打印本页]

作者: wxcute    时间: 2008-12-2 21:29     标题: 向大家征集『新手练功区』批处理新手题目

新手也分多个阶段。
零、预备阶段,基本上不了解电脑是其一,不了解命令是其二。
  此阶段新手要先了解电脑基础知识。
一、起步阶段,只知道有批处理这个名词,不知道她具体能干什么。
  此阶段新手要先了解批处理的发展过程,积累批处理相关知识。
二、热身阶段,知道了一些命令,但不知道该如何组合使用。
  此阶段新手需要多看教程,可试运行他人例子,看看有什么效果;
  可提出一些问题看别人是如何解决的,并从中学习各个命令的用法与作用。
三、试手阶段,已经会用一些命令,可觉得用起来不熟练,解决问题很费劲。
  此阶段新手可多看帖子学习,可试做练习题,遇到问题也可发帖咨询。
  分解代码,一句句地了解分析其作用。即为什么要这样用,不这样用可以吗,有没有别的办法等。
  能读懂他人代码后就需要全面了解常用命令各种用法了。

当基本上了解了各种命令的使用方法并能做一定的应用后你就进入中级阶段了。
当然各人因条件的不同,会有学习进度的差异。大家不用着急,其实 “高手” 也有很多不懂的东西,你信不信?

费话少说。下面进入正题,在这里主要征集 热身阶段、试手阶段 和 中级阶段 这三个阶段的题目。
请大家顺便估计一下题目的难度等级,如:


试手阶段:如何判断输入的数是不是素数?
中级阶段:输入两个数字求公因数,要求判断输入是否合法。
  1. 其实大家都可以发帖的,大家有什么好题目大可不必由我来转发,不然新手练功区就我一 "光杆" 也不好看嘛!
  2. 些帖只是做题目征集用,以后好做个各类典型题目的链接。
复制代码


[ 本帖最后由 wxcute 于 2008-12-10 10:46 编辑 ]
作者: lhjoanna    时间: 2008-12-3 00:55

wxcute兄很费心啊,我来推荐几道吧。在写代码中遇到的,应该算是中级阶段吧。
1、输入一段数字,对其进行如下操作后输出:
      <1>若末尾为0则替换为*
      <2>若中间有0则替换为#
      <3>若不含0则原样输出
      例:输入 110207600    输出  11#2#76**
2、打印一个9x9(9行9列)的表格,可能用到的字符有:┏ ┓┗ ┛┳ ┻ ┣ ┫ ╋ ━ ┃
3、有一文本文件内容如下:
   本来是按照城市的英文名字排序,现要求把包含在"[]"中的国家名放到前面,并按照国家名拼音排序。具体输出在下面列出。原文件很长,只取了其中一部分,掌握算法即可。
  1. Abadan 阿巴丹[伊朗]
  2. AbuDhabi 阿布扎比[阿联酋]
  3. Aden 亚丁[也门]
  4. Amman 安曼[约旦]
  5. Ankara 安卡拉[土耳其]
  6. Baghdad 巴格达[伊拉克]
  7. Baku 巴库[阿塞拜疆]
  8. BandarSeriBegawan 斯里巴加湾港[文莱]
  9. Bangkok 曼谷[泰国]
  10. Beirut 贝鲁特[黎巴嫩]
  11. Bombay 孟买[印度]
  12. Calcutta 加尔各答[印度]
  13. Colombo 科伦坡[斯里兰卡]
复制代码
要求运行后输出为:
  1. [阿联酋] AbuDhabi 阿布扎比  
  2. [阿塞拜疆] Baku 巴库   
  3. [黎巴嫩] Beirut 贝鲁特   
  4. [斯里兰卡] Colombo 科伦坡   
  5. [泰国] Bangkok 曼谷   
  6. [土耳其] Ankara 安卡拉   
  7. [文莱] BandarSeriBegawan 斯里巴加湾港  
  8. [也门] Aden 亚丁   
  9. [伊拉克] Baghdad 巴格达  
  10. [伊朗] Abadan 阿巴丹   
  11. [印度] Bombay 孟买   
  12. [印度] Calcutta 加尔各答   
  13. [约旦] Amman 安曼   
复制代码

[ 本帖最后由 lhjoanna 于 2008-12-3 01:01 编辑 ]
作者: pusofalse    时间: 2008-12-3 21:37     标题: 回复 2楼 的帖子

- -||| 我一个都不会~ 可以借助第三方工具吗?
第一题,若0是在字符串的头部呢,要替换成什么?
第二题,是否能给个现成的样本呢~

[ 本帖最后由 pusofalse 于 2008-12-3 22:21 编辑 ]
作者: lhjoanna    时间: 2008-12-3 22:59

呵呵,兄过谦了啊。
    第一题本来是要处理一个数的,对中间和末尾的0进行不同的标记,00123和123都被识别为一个数。既然兄问了,那么如果在头部就原样输出吧,例:输入  00110207600    输出  0011#2#76**
      第二题本是要画一个棋盘的,呵呵,上传个附件,供参考啊。
作者: wxcute    时间: 2008-12-4 11:50

先多谢两位对此事的支持。
其实大家也可以出题目。难度大了也没关系,只要标明是什么难度等级与适合哪个阶段的会员做就行了。
我觉得很有必要收集一些典型的实际问题,如批处理在重命名方面很有优势。
作者: tireless    时间: 2008-12-4 20:21

[中级]计算即开型彩票中奖金额:

彩票背面的游戏规则
刮开城堡形状的覆盖区,从起点开始,第一关的数字是几,就在闯关图上冲几步,如果停到中奖金额上,即中该金额奖金;在第一关的基础上,第二关的数字是几,向前再冲几步,如果停到中奖金额上,即中该金额奖金,以此类推,按顺序冲完五关的数字后,将所有中奖金额相加,即为你中的奖金。中奖奖金兼中兼得。

要求:显示中奖金额后,返回输入号码处。
作者: wxcute    时间: 2008-12-4 20:31     标题: 回复 6楼 的帖子

中了五万块不是要请客吧?
今天出题的帐单就由你来付了,呵呵。
作者: tireless    时间: 2008-12-9 21:54     标题: 把jpg图片批量重命名为奇偶

某文件夹下有两组图片:
以 a 开头的 —— a001.jpg,a002.jpg...直到 a200.jpg
以 b 开头的 —— b001.jpg,b002.jpg...直到 b200.jpg

要求:
把 a 开头的文件重命名为奇数 —— a001.jpg,a003.jpg...直到 a399.jpg
把 b 开头的文件重命名为偶数 —— a002.jpg,a004.jpg...直到 a400.jpg

======================================================
这个问题是从别的论坛的『 软件使用交流 』版块看到的问题。原帖:
现在我这里有大量的文件需要重命名,共分为两大类,一类为奇数项,但是文件名称为a001.jpg,a002.jpg。。。。。a200.jpg  还有一类是偶数项,文件名为b001.jpg,b002.jpg。。。b200.jpg,现在我想将a开始的文件命名为a001.jpg,a003,jpg。。。a399.jpg,将b开始的文件重命名为a002.jpg,a004.jpg.......a400.jpg。 请问这个用什么方法最好了,最好能告诉详细些。先谢谢啦

[ 本帖最后由 tireless 于 2008-12-9 22:10 编辑 ]
作者: wxcute    时间: 2008-12-10 11:00

大家出的题目都很好,我发帖征集题目的本意是让更多的人参与到出题的行列中来。

其实大家都可以发帖的,大家有什么好题目大可不必由我来转发,不然新手练功区就我一 &quot;光杆&quot; 也不好看嘛!

些帖只是做题目征集用,为的是以后好做个各类典型题目的链接用。

再次希望大家多多出题、出好题 ^_^ 。

作者: rat    时间: 2008-12-10 11:34

热身阶段:获取字符的ASCII(20,126]

[ 本帖最后由 rat 于 2008-12-10 11:35 编辑 ]
作者: keen    时间: 2009-3-29 23:43

试手阶段:
判断输入的任意字符串,是纯字符串,还是纯数字。除了特殊字符。
作者: tyc    时间: 2009-4-2 09:12     标题: 出题1

1、用高精度计算出S=1!+2!+3!+……n!(n≤),其中“ !”表示阶乘。输入正整数N,输出计算结果S。
作者: tyc    时间: 2009-4-2 09:13     标题: 出题2

2、题目描述:在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果子经过n-1次合并之后,就只剩下一堆了。多多在合并果子时总共消耗的体力等于每次合并所耗体力之和。
因为还要花大力气把这些果子搬回家,所以多多在合并果子时要尽可能地节省体力。假定每个果子重量都为1,并且已知果子的种类数和每种果子的数目,你的任务是设计出合并的次序方案,使多多耗费的体力最少,并输出这个最小的体力耗费值。例如有3种果子,数目依次为1,2,9。可以先将1、2堆合并,新堆数目为3,耗费体力为3。接着,将新堆与原先的第三堆合并,又得到新的堆,数目为12,耗费体力为12。所以多多总共耗费体力=3+12=15。可以证明15为最小的体力耗费值。
输入:输入包括两行,第一行是一个整数n(1<=n<=10000),表示果子的种类数。第二行包含n个整数,用空格分隔,第i个整数ai(1<=ai<=20000)是第i种果子的数目。
输出:输出包括一行,这一行只包含一个整数,也就是最小的体力耗费值。输入数据保证这个值小于2^31。
作者: tyc    时间: 2009-4-2 09:14     标题: 出题3

方阵填数:在一个N×N的方阵中,填入1,2,.....N×N个数,并要求

        构成如下的格式:
        如  N=4                     N=5
        10 11  12   1                  13  14  15 16   1
        9  16  13   2                  12  23  24 17   2
        8  15  14   3                  11  22  25 18   3
        7   6   5   4                  10  21  20 19   4
                                       9   8   7   6   5
作者: tyc    时间: 2009-4-2 09:15     标题: 出题4

2.【问题描述】数学上定义:
        n!=1×2×3×...×(n-1)×n (N>0)
        0!=1
        若用integer型数据表示阶乘,最多可到7!,用Longint类型也只能到12!
        要求输入正整数n,求 n! 的精确表示
作者: sjzong    时间: 2009-6-24 22:45     标题: 回复 2楼 的帖子

第一题本来是要处理一个数的,对中间和末尾的0进行不同的标记,00123和123都被识别为一个数。既然兄问了,那么如果在头部就原样输出吧,例:输入  00110207600    输出  0011#2#76**
我看到这个题目,就有做出这个题目的冲动!所以就写出答案,望版主通过
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :accept
  4. cls
  5. set /p n=要替换数字串[0~9]是:
  6. echo.%n%|findstr "^[0-9][0-9]*$">nul||goto accept
  7. for /f "tokens=* delims=0" %%a in ("%n%") do (
  8.   if "%%a" equ "" (echo 替换后的数字串是:%n%&pause>nul&goto accept) else (set b=%%a)
  9. )
  10. set num1=!n:%b%=!
  11. set num2=
  12. set num3=
  13. :loop
  14. if "!b:~-1!" neq "" (
  15.   if "!b:~-1!" equ "0" (set num3=!num3!*&set b=!b:~0,-1!&goto loop) else (goto replace))
  16. :replace
  17. set num2=!b:0=#!
  18. set num=!num1!!num2!!num3!
  19. echo 替换后的数字串是:%num%
  20. pause>nul&goto accept
复制代码


[ 本帖最后由 sjzong 于 2009-6-29 01:09 编辑 ]
作者: sjzong    时间: 2009-6-28 23:30     标题: [题目]删数问题

键盘输入一个高精度的正整数N,去掉其中任意S个数字后使剩下的数最小。
例如:N=175438, S=4 ,可以删去7,5,4,8,得到13。
原理:就是从左向右找到第一个i,使n>n[i+1],如果找到了,就删第i个,否则删最后一位。
作者: sjzong    时间: 2009-6-29 01:08     标题: 回复 17楼 的帖子

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :n
  4. cls
  5. set /p num=请输入一个正整数n=
  6. echo.%num%|findstr "^[1-9][0-9]*$">nul||goto n
  7. :m
  8. set /p m=请输入删除的个数m:
  9. echo.%m%|findstr "^[1-9][0-9]*$">nul||goto m
  10. set/a count=0
  11. :loop
  12. if "!num:~%count%,1!" neq "" (set/a count+=1&goto loop)
  13. if !m! gtr !count! echo 删除的位数过大&pause>nul&goto n
  14. echo 正整数 n=!num! ,删掉 !m! 个数字
  15. set/a count=0
  16. :a
  17. set/a b=0
  18. :b
  19. set/a b+=1
  20. set/a c=!b!-1
  21. if !num:~%b%! neq "" (
  22. if "!num:~%c%,1!" gtr "!num:~%b%,1!" (
  23.   set num=!num:~0,%c%!!num:~%b%!
  24.   set/a count+=1
  25.   if !count! neq !m! goto a
  26.   ) else (goto b)
  27. ) else (
  28. set num=!num:~0,%c%!
  29. set/a count+=1
  30. if !count! neq !m! goto a)
  31. if "!num!" equ "" (echo 得到最小的数是:空) else (echo 得到最小的数是:!num!)
  32. pause>nul&goto n
复制代码

作者: keiamy    时间: 2014-1-17 19:25

键盘输入一个高精度的正整数N,去掉其中任意S个数字后使剩下的数最小。
例如:N=175438, S=4 ,可以删去7,5 ...
sjzong 发表于 2009-6-28 23:30

像我這樣的新手也來做做練習吧﹗相信大伙們定會給予教導和指正的
  1. @echo off&setlocal enabledelayedexpansion
  2. set n=175438&set s=4
  3. :lp
  4. if defined n (
  5. set ".%n:~,1%=%n:~,1%"
  6. set "n=%n:~1%"
  7. goto lp)
  8. for /f "delims==." %%i in ('set.') do set x=!x!%%i
  9. echo !x:~,-%s%!
  10. pause
复制代码

作者: taofan712    时间: 2017-2-11 21:52

回复 2# lhjoanna


    按国家名字排序
  1. @ECHO OFF
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1,2,3 delims=[] " %%a in (a.txt) do (
  4. echo [%%c]%%a %%b )>>log.txt
  5. sort log.txt>newa.txt & del /f /q log.txt
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2