`
googya
  • 浏览: 140484 次
  • 性别: Icon_minigender_1
  • 来自: 汉川
社区版块
存档分类
最新评论

打印图形(很基础的)

阅读更多
    想不到有家公司的笔试题中居然有一道打印图形的题目,更让人意外的是,我当时居然卡住了,楞没做出来。汗!看来基础很不牢固,该!这样的题目应该在刚学习语言的时候就应该完成的。。。。
    啥也不说了,把题目亮出来吧。输出以下图形:
    #####*#####
    ####*#*####
    ###*#*#*###
    ##*#*#*#*##
    #*#*#*#*#*#
    *#*#*#*#*#*
当时考虑对称,可是我看了一下,觉得对称也不是很好,要写很多代码。我看到太多的代码就头疼。
    之后,回来看了一下,其实真的很简单。避免忘记想法,写了一个ruby片段:

for i in 0..5
    print "#"*(5-i)
    i=i-1
    0.upto(i) do
         print "*#"
     end
     print "*"
    unless (4-i)<=0
        print "#"*(4-i)
    end
    
    puts "\n"
end





想法很直接,输出前面的井号,然后输出星号包含的一串,然后输出后面的井号。一行就这样输出来了。
    下次笔试这样的题目肯定不能空着,太丢人了。。。
    基础不牢,地动山摇。赶紧把那些丢掉的捡回来



2
0
分享到:
评论
3 楼 tjcjc 2010-10-27  
(1..11).step(2).inject("#") do |f,x|
f.tr("#*","*#").tap{|y|puts y.center(11,"#")}.center(x+2,"#")
end
2 楼 googya 2010-10-15  
jayliud 写道
5.downto(0) do |i|
puts "#"*i+(1..(11 - 2 * i)).inject(""){|s,m| (m % 2 == 0) ? s+='#' : s+='*'}+"#"*i
end

 

这样写确实简洁。和你的相比,我的就没有利用ruby的思想。
1 楼 jayliud 2010-10-14  
5.downto(0) do |i|
puts "#"*i+(1..(11 - 2 * i)).inject(""){|s,m| (m % 2 == 0) ? s+='#' : s+='*'}+"#"*i
end

相关推荐

Global site tag (gtag.js) - Google Analytics