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

在控制台打印金字塔

题目要求:
    用字符*打印一个金字塔,不限语言。

效果:


实现:
  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=
复制代码
欢迎帖码,语言不限。

  1. @echo off & setlocal enabledelayedexpansion
  2. set /a "w=80,h=35,t=w*h,xc=w/2,yc=h/2"
  3. mode %w%,40
  4. for /l %%i in (1 1 !t!) do set "s=!s! "
  5. call :f 0 -16 32 s
  6. echo;!s! &pause &exit
  7. :f xtop ytop hei s
  8. REM 半顶角对边与底角对边比: 1:1 , hei <= 1, 绘 3 点, 否则递归
  9. setlocal
  10. set "s=!%4!"
  11. if %3 leq 1 (
  12.     set /a "a=%1 - 1, d=b=%2 + 1, c= %1 + 1"
  13.     call :d %1 %2 & call :d !a! !b! & call :d !c! !d!
  14. ) else (
  15.     set /a "h=%3 >> 1, a= %1 - h, d=b=%2 + h, c= %1 + h"
  16.     call :f %1 %2 !h! %4 & call :f !a! !b! !h! %4 & call :f !c! !d! !h! %4
  17. )
  18. (
  19. endlocal
  20. set "%4=%s%"
  21. exit /b
  22. )
  23. :d
  24. set /a "i=%1-xc + (%2-yc) * w + 1, L=i-1"
  25. for /f "tokens=1,2" %%a in ("!L! !i!") do (set s=!s:~0,%%a!*!s:~%%b!)
  26. exit /b
复制代码
1

评分人数

TOP

回复 29# 523066680
Matrix67的方法就是好用。

TOP

本帖最后由 happy886rr 于 2017-3-18 18:51 编辑

回复 30# 老刘1号
你画的是有点偏差了,应该这样画(外链图,随时失效)
  1. @echo off
  2. mode con cols=300 lines=80
  3. setlocal enabledelayedexpansion
  4. set "Space=                                                                                                    "
  5. set/a "L=(1<<7)-1"
  6. for /l %%i in (0,1,!L!) do (
  7. set/a "1/(%%i&1)" 2>NUL || (
  8. set/a "SL=(L-%%i)>>1"
  9. for %%j in (!SL!) do (
  10. set "PreSpace=!Space:~0,%%j!"
  11. )
  12. for /l %%j in (0,1,!L!) do (
  13. set/a "1/((%%i&%%j)-%%j)" 2>NUL && (
  14. set "PreSpace=!PreSpace! "
  15. ) || (
  16. set "PreSpace=!PreSpace!*"
  17. )
  18. )
  19. echo;!PreSpace!
  20. )
  21. )
  22. set/p=LEVEL: 7
复制代码
2

评分人数

TOP

回复 29# 523066680


    酱紫啊……

TOP

本帖最后由 523066680 于 2017-3-18 14:29 编辑

回复 28# 老刘1号


    其实我20楼的那个不是标准的,上午想起来不对马上打草稿补了一发~

原版的是有一种递归性质,不管从哪一部分放大看都有相似性,而且越大越密集越好看

https://en.wikipedia.org/wiki/Sierpinski_triangle

TOP

回复 20# 523066680
  1. '&@(cls&Echo off 2>nul 3>nul)
  2. '&set /p long=输入长度:
  3. '&set /p floor=输入层数:
  4. '&Cscript -nologo -e:vbscript "%~0" "%floor%" "%Long%"
  5. '&Pause&Exit
  6. floor_=WScript.Arguments(0)
  7. long_=WScript.Arguments(1)
  8. For a = 1 To floor_
  9. For i = 1 To long_
  10. For b = 1 To a
  11. For j = 1 To i
  12. Echo=Echo&"*"
  13. Next
  14. For j = i To long_
  15. Echo=Echo&" "
  16. Next
  17. Next
  18. Echo=Echo&vbNewLine
  19. Next
  20. Next
  21. WScript.Echo echo
复制代码

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. set level=4
  3. set /a n=100000000,m=1
  4. for /l %%a in (1 1 %level%) do set /a m*=2
  5. set /a a=n+2*m,aa=m-1+n,m=n+m
  6. for /l %%a in (%n% 1 %a%) do set "#%%a= "
  7. set #%m%=*
  8. for /l %%a in (%n% 1 %aa%) do (
  9.     set "s="&set r=*
  10.     for /f "tokens=1* delims==" %%b in ('set #') do set "s=!s!%%c"
  11.     echo;!s!
  12.     set /a b=m-%%a+n,c=m+%%a-n
  13.     for /l %%c in (!b! 1 !c!) do (
  14.         set /a d=%%c-1,e=%%c+1,h=c+1
  15.         for %%i in (!d!) do set f=!#%%i!
  16.         for %%j in (!e!) do set g=!#%%j!
  17.         if "!f!" neq "!g!" (set t=*) else set "t= "
  18.         for %%i in (!d!) do set #%%i=!r!
  19.         set r=!t!
  20.     )
  21.     set #!c!=!t!&set #!h!=*
  22. )
  23. pause
复制代码
2

评分人数

TOP

Writing Code That Nobody Else Can Read.
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

本帖最后由 523066680 于 2017-3-18 09:56 编辑
  1. my @lines = "*";
  2. func( \@lines, 1 );
  3. sub func
  4. {
  5.     my ($ref, $lv) = (shift, shift);
  6.     my @tri;
  7.     my $top = $#$ref + 1;
  8.     grep { push @tri, "$_ $_" } @$ref;
  9.     grep { unshift @tri, " "x$top .$_ ." "x$top } ( reverse @$ref );
  10.     ( $lv <= 3 ) ?
  11.          func( \@tri, $lv+1 ) : print join("\n", @tri);
  12. }
复制代码
  1.                *               
  2.               * *              
  3.              *   *            
  4.             * * * *            
  5.            *       *           
  6.           * *     * *         
  7.          *   *   *   *         
  8.         * * * * * * * *        
  9.        *               *      
  10.       * *             * *      
  11.      *   *           *   *     
  12.     * * * *         * * * *   
  13.    *       *       *       *   
  14.   * *     * *     * *     * *  
  15. *   *   *   *   *   *   *   *
  16. * * * * * * * * * * * * * * * *
复制代码
1

评分人数

TOP

回复 17# taofan712


    现在这个时代,代码不仅是给机器看的,其他人也需要看,也需要理解,这样才能一起做成大的项目
过度的精简代码失去的东西比得到的多的多。
这也是为何会有注释,有缩进
编程的最高境界就是能让你写的程序自成文章

TOP

本帖最后由 老刘1号 于 2017-3-18 00:07 编辑

回复 22# happy886rr


    好的,收到
不用set输出的话……这种题不准备用批写了,太费劲

TOP

本帖最后由 happy886rr 于 2017-3-17 23:51 编辑

回复 21# 老刘1号
最后一版正常。

TOP

本帖最后由 老刘1号 于 2017-3-17 23:48 编辑

回复 1# happy886rr
兼容WIN7的来了
  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. set a=.
  10. for /l %%a in (1 1 !half!) do set "a=!a! "
  11. for /l %%a in (1 1 !i!) do set a=!a!*
  12. echo!a!
  13. if !long! == 1 goto end
  14. :loop
  15. set /a i+=2
  16. set /a half-=1
  17. set a=.
  18. for /l %%a in (1 1 !half!) do set "a=!a! "
  19. for /l %%a in (1 1 !i!) do set a=!a!*
  20. echo!a!
  21. if "!i!" equ "!long!" goto end
  22. goto loop
  23. :end
  24. pause
复制代码

TOP

本帖最后由 523066680 于 2017-3-18 08:26 编辑

回复 19# happy886rr

夸张了 ,没试过字符版,好像可以先从直角开始。
  1. my $floor = 5;
  2. my $s = " "x$floor;
  3. my @line;
  4. for my $n ( 0 .. $floor-1 )
  5. {
  6.     $s=~s/ /*/;
  7.     $line[$n] = $s;
  8. }
  9. for my $n ( $floor .. $floor*$floor - 1 )
  10. {
  11.     $line[$n] = $line[$n%$floor] x ($n/$floor+1);
  12. }
  13. print join("\n", @line);
复制代码

*   
**   
***  
****
*****
*    *   
**   **   
***  ***  
**** ****
**********
*    *    *   
**   **   **   
***  ***  ***  
**** **** ****
***************
*    *    *    *   
**   **   **   **   
***  ***  ***  ***  
**** **** **** ****
********************
*    *    *    *    *   
**   **   **   **   **   
***  ***  ***  ***  ***  
**** **** **** **** ****
*************************



发现差远了,晚点儿补上

TOP

返回列表