返回列表 发帖

在控制台打印金字塔

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

效果:


实现:
@echo off
set "str=                                           ******************************************"
for /l %%i in (1,1,38) do (
call,echo,%%str:~%%i,%%i%%
)
set/p=COPY
欢迎帖码,语言不限。

我要来答,给我3分钟。

TOP

>>> print(''.join([('*'*r).center(17,'-')+"\n" for r in range(1,18,2)]))
--------*--------
-------***-------
------*****------
-----*******-----
----*********----
---***********---
--*************--
-***************-
*****************COPY
1

评分人数

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

TOP

ps
$n=9;1..$n|%{' '*($n-$_)+'*'*(2*$_-1)}COPY
2

评分人数

TOP

@echo off & setlocal EnableDelayedExpansion
set max=78
for /l %%$ in (1 1 10) do (
    set a=!a!**
    call :zhong !a!
)
pause
:zhong
set s=%1
for /l %%# in (1,2,!max!) do if "!s:~%max%,1!" == "" set "s= !s! "
set s=!s:~1,%max%!& echo;!s!
exit /bCOPY
1

评分人数

TOP

仅支持中文效率极低:http://www.bathome.net/thread-43049-1-1.html
2

评分人数

TOP

这个贴应该发到出题区。
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

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

受win7CMD特性限制,只支持XP系统。
@echo off
Setlocal enabledelayedexpansion
::CODER BY Old.Liu POWERD BY iBAT
set /p long=Input:
set /a long=long/2
set /a long=long*2+1
set /a half=long/2
set /a i=1
for /l %%a in (1 1 !half!) do set/p= <nul
for /l %%a in (1 1 !i!) do set/p=*<nul
echo.
if !long! == 1 goto end
:loop
set /a i+=2
set /a half-=1
for /l %%a in (1 1 !half!) do set/p= <nul
for /l %%a in (1 1 !i!) do set/p=*<nul
echo.
if "!i!" equ "!long!" goto end
goto loop
:end
pauseCOPY
1

评分人数

    • happy886rr: 左边怎么没空格,不兼容win7技术 + 1

TOP

回复 7# codegay

出题区权限不够,挑战区这题又太简单。

TOP

回复 9# happy886rr

继续搞点这种题目啊,趣味性十足。

TOP

被截图蒙蔽了,实际上并没有居中的要求?
那么可以减几行
@echo off&setlocal enabledelayedexpansion
set "kong="
for /l %%a in (1,1,17) do set "kong=!kong! "
set "s=*"
for /l %%a in (1,1,17) do (
   echo !kong!!s!
   set "kong=!kong:~1!"
   set "s=!s!**!
)
pauseCOPY

TOP

嗯嗯,还可以再少几行
@set s=                 *
:r
@echo;%s%&if "%s:~0,1%"==" " set s=%s:~1%%s:~-1%%s:~-1%&goto :r
@pauseCOPY
1

评分人数

TOP

这样判断的话,又可以再少几个字
@set s=                 *
:r
@echo(%s%&if %s:~,1%*==* set s=%s:~1%**&goto:r
@pauseCOPY

TOP

  • my $s="          *          \n";
  • do { print $s } while ( $s=~s/ (\*+) /*$1*/ );
1

评分人数

[url=][/url]

TOP

用goto取代if,又能减少几个字节。
@set s=                 O
:O
@echo;%s%&set s=%s:~1%OO&goto%s:~,2%O
:OO
pauseCOPY

TOP

返回列表