找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 77602|回复: 32

在控制台打印金字塔

[复制链接]
发表于 2017-3-16 21:28:11 | 显示全部楼层 |阅读模式
题目要求:
    用字符*打印一个金字塔,不限语言。

效果:


实现:
  1. @echo off
  2. set "str=                                           ******************************************"
  3. for /l %%i in (1,1,38) do (
  4.         call,echo,%%str:~%%i,%%i%%
  5. )
  6. set/p=
复制代码
欢迎帖码,语言不限。
发表于 2017-3-16 21:57:17 | 显示全部楼层
我要来答,给我3分钟。
发表于 2017-3-16 22:03:51 | 显示全部楼层
  1. >>> print(''.join([('*'*r).center(17,'-')+"\n" for r in range(1,18,2)]))
  2. --------*--------
  3. -------***-------
  4. ------*****------
  5. -----*******-----
  6. ----*********----
  7. ---***********---
  8. --*************--
  9. -***************-
  10. *****************
复制代码

评分

参与人数 1技术 +1 收起 理由
happy886rr + 1 一行流666

查看全部评分

发表于 2017-3-16 22:08:32 | 显示全部楼层
ps
  1. $n=9;1..$n|%{' '*($n-$_)+'*'*(2*$_-1)}
复制代码

评分

参与人数 2技术 +2 收起 理由
happy886rr + 1
codegay + 1 66666

查看全部评分

发表于 2017-3-16 22:23:14 | 显示全部楼层

  1. @echo off & setlocal EnableDelayedExpansion
  2. set max=78
  3. for /l %%$ in (1 1 10) do (
  4.     set a=!a!**
  5.     call :zhong !a!
  6. )
  7. pause
  8. :zhong
  9. set s=%1
  10. for /l %%# in (1,2,!max!) do if "!s:~%max%,1!" == "" set "s= !s! "
  11. set s=!s:~1,%max%!& echo;!s!
  12. exit /b
复制代码

评分

参与人数 1技术 +1 收起 理由
happy886rr + 1 思路清晰

查看全部评分

发表于 2017-3-16 22:24:17 | 显示全部楼层
仅支持中文效率极低:http://www.bathome.net/thread-43049-1-1.html

评分

参与人数 2技术 +2 收起 理由
happy886rr + 1 很庞大
老刘1号 + 1 666666

查看全部评分

发表于 2017-3-16 23:32:12 | 显示全部楼层
这个贴应该发到出题区。
发表于 2017-3-16 23:34:48 | 显示全部楼层
本帖最后由 老刘1号 于 2017-3-18 18:25 编辑

受win7CMD特性限制,只支持XP系统。
  1. @echo off
  2. Setlocal enabledelayedexpansion
  3. ::CODER BY Old.Liu POWERD BY iBAT
  4. set /p long=Input:
  5. set /a long=long/2
  6. set /a long=long*2+1
  7. set /a half=long/2
  8. set /a i=1
  9. for /l %%a in (1 1 !half!) do set/p= <nul
  10. for /l %%a in (1 1 !i!) do set/p=*<nul
  11. echo.
  12. if !long! == 1 goto end
  13. :loop
  14. set /a i+=2
  15. set /a half-=1
  16. for /l %%a in (1 1 !half!) do set/p= <nul
  17. for /l %%a in (1 1 !i!) do set/p=*<nul
  18. echo.
  19. if "!i!" equ "!long!" goto end
  20. goto loop
  21. :end
  22. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
happy886rr + 1 左边怎么没空格,不兼容win7

查看全部评分

 楼主| 发表于 2017-3-17 00:03:34 | 显示全部楼层
回复 7# codegay

出题区权限不够,挑战区这题又太简单。
发表于 2017-3-17 00:15:53 | 显示全部楼层
回复 9# happy886rr

继续搞点这种题目啊,趣味性十足。
发表于 2017-3-17 09:21:29 | 显示全部楼层
被截图蒙蔽了,实际上并没有居中的要求?
那么可以减几行

  1. @echo off&setlocal enabledelayedexpansion
  2. set "kong="
  3. for /l %%a in (1,1,17) do set "kong=!kong! "
  4. set "s=*"
  5. for /l %%a in (1,1,17) do (
  6.    echo !kong!!s!
  7.    set "kong=!kong:~1!"
  8.    set "s=!s!**!
  9. )
  10. pause
复制代码
发表于 2017-3-17 09:29:24 | 显示全部楼层
嗯嗯,还可以再少几行

  1. @set s=                 *
  2. :r
  3. @echo;%s%&if "%s:~0,1%"==" " set s=%s:~1%%s:~-1%%s:~-1%&goto :r
  4. @pause
复制代码

评分

参与人数 1技术 +1 收起 理由
happy886rr + 1 666

查看全部评分

发表于 2017-3-17 09:39:22 | 显示全部楼层
这样判断的话,又可以再少几个字
  1. @set s=                 *
  2. :r
  3. @echo(%s%&if %s:~,1%*==* set s=%s:~1%**&goto:r
  4. @pause
复制代码
发表于 2017-3-17 10:09:09 | 显示全部楼层
  • my $s="          *          \n";
  • do { print $s } while ( $s=~s/ (\*+) /*$1*/ );

评分

参与人数 1技术 +1 收起 理由
happy886rr + 1 艺术

查看全部评分

发表于 2017-3-17 10:14:32 | 显示全部楼层
用goto取代if,又能减少几个字节。

  1. @set s=                 O
  2. :O
  3. @echo;%s%&set s=%s:~1%OO&goto%s:~,2%O
  4. :OO
  5. pause
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-16 22:01 , Processed in 0.015377 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表