打印特定规律的图形

方法私聊讲解

解决代码如下:

JAVA版:

import java.util.*;

public class Main {

   

    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);

        int n=in.nextInt();

        int m=1+(n-1)*2;

        int a=1+(n-1)*4;

        String s[]=new String [m];

        for(int i=0;i<m;i++){

            s[i]="";

        }

        int t=1;

        int v=1;

        int k=0;

        for(int i=0;i<m;i++){

            v=1;

            if(i==0){

                for(int j=0;j<m;j++){

                    s[i]+="@";

                }

            }

            else{

                for(int j=0;j<=k;j++){

                    //if(i==2)System.out.println(v);

                    if(v==1){

                        s[i]+="@";

                        v*=-1;

                    }

                    else{

                        s[i]+=" ";

                        v*=-1;

                    }

                }

                if(t==1){

                    for(int j=k+1;j<m;j++){

                        s[i]+=" ";

                    }

                    t*=-1;

                }

                else{

                    for(int j=k+1;j<m;j++){

                        s[i]+="@";

                       

                    }

                    t*=-1;

                }

                if(t==-1){

                    k+=2;

                }

            }

           

        }

        for(int i=0;i<m;i++){

            System.out.print(s[i]);

            StringBuffer ss= new StringBuffer(s[i]);

            ss.reverse();

            System.out.println(ss.substring(1,ss.length()));

        }

        for(int i=m-2;i>=0;i--){

            System.out.print(s[i]);

            StringBuffer ss= new StringBuffer(s[i]);

            ss.reverse();

            System.out.println(ss.substring(1,ss.length()));

        }

       

    }

}


 

Python版:

def main():

    n = int(input())

    m = 1 + (n - 1) * 2

    a = 1 + (n - 1) * 4

    s = [""] * m

    t = 1

    v = 1

    k = 0

    for i in range(m):

        v = 1

        if i == 0:

            s[i] = "@" * m

        else:

            for j in range(k + 1):

                if v == 1:

                    s[i] += "@"

                    v *= -1

                else:

                    s[i] += " "

                    v *= -1

            if t == 1:

                s[i] += " " * (m - k - 1)

                t *= -1

            else:

                s[i] += "@" * (m - k - 1)

                t *= -1

            if t == -1:

                k += 2

    for i in range(m):

        print(s[i] + s[i][::-1][1:])

    for i in range(m - 2, -1, -1):

        print(s[i] + s[i][::-1][1:])


 

if __name__ == "__main__":

    main()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值