如何打印以下图案

时间:2019-02-12 17:44:47

标签: java loops nested-loops

对于给定的输入,我需要打印图案。例如对于input = 6,我必须打印:

MMMMMMSDDDDDD
MMMMMSSSDDDDD
MMMMSSSSSDDDD
MMMSSSSSSSDDD
MMSSSSSSSSSDD
MSSSSSSSSSSSD
CSSSSSSSSSSSK
CCSSSSSSSSSKK
CCCSSSSSSSKKK
CCCCSSSSSKKKK
CCCCCSSSKKKKK
CCCCCCSKKKKKK 

我已经尝试过了,但是没有比这更进一步的人了

public class tgk {

public static void main(String[] args)  {

    Scanner sc = new Scanner(System.in);

    int size = sc.nextInt();

    int half = ((2*size)+1)/2;
     for (int i = 0; i < size ; i++) 
     { 
         for (int j = size; j > i; j--) 
         {
         System.out.print("M");
          }
     for (int k = half+1 ; k > half - i; k--) 
     {
         System.out.print("S");
     }






    System.out.println();
 }


     for(int i = size; i > 0; i--)
     {
         for (int j = size; j >= i; j--) {
             System.out.print("C");
         }
         for (int k = 0; k < (i * 2 - 1); k++) {
             System.out.print("S");
         }



         System.out.println();
     }
}

}

如果input = 3,则应为

MMMSDDD
MMSSSDD
MSSSSSD
CSSSSSK
CCSSSKK
CCCSKKK

2 个答案:

答案 0 :(得分:1)

您可以使用两组for循环来打印图案的每一半。假设input变量包含问题的大小

int input = 3;

for (int i = 0; i < input; i++) {
    for (int j = 0; j < input - i; j++) {
        System.out.print('M');
    }
    for (int j = 0; j < 2 * i + 1; j++) {
        System.out.print('S');
    }
    for (int j = 0; j < input - i; j++) {
        System.out.print('D');
    }
    System.out.println();
}
for (int i = input - 1; i >= 0; i--) {
    for (int j = 0; j < input - i; j++) {
        System.out.print('C');
    }
    for (int j = 0; j < 2 * i + 1; j++) {
        System.out.print('S');
    }
    for (int j = 0; j < input - i; j++) {
        System.out.print('K');
    }
    System.out.println();
}

将打印input = 3

MMMSDDD
MMSSSDD
MSSSSSD
CSSSSSK
CCSSSKK
CCCSKKK

input = 6

MMMMMMSDDDDDD
MMMMMSSSDDDDD
MMMMSSSSSDDDD
MMMSSSSSSSDDD
MMSSSSSSSSSDD
MSSSSSSSSSSSD
CSSSSSSSSSSSK
CCSSSSSSSSSKK
CCCSSSSSSSKKK
CCCCSSSSSKKKK
CCCCCSSSKKKKK
CCCCCCSKKKKKK

答案 1 :(得分:0)

我不知道为什么,但是我真的希望它只能与一组for循环一起使用:

    int number = 8;

    for (int i = 0; i < number * 2; i++) {
        for (int j = 0; j < (number * 2) + 1; j++) {
            System.out.print(
                i <  number && j+i < number ?    'M' :
                i <  number && j-i > number ?    'D' :
                i <  number                 ?    'S' :
                i >= number && i-j >= number ?   'C' :
                i >= number && j+i >= number*3 ? 'K' :
                                                 'S'
            );
        }
        System.out.println();
    }

因此,对于8(如代码中),它将打印:

MMMMMMMMSDDDDDDDD
MMMMMMMSSSDDDDDDD
MMMMMMSSSSSDDDDDD
MMMMMSSSSSSSDDDDD
MMMMSSSSSSSSSDDDD
MMMSSSSSSSSSSSDDD
MMSSSSSSSSSSSSSDD
MSSSSSSSSSSSSSSSD
CSSSSSSSSSSSSSSSK
CCSSSSSSSSSSSSSKK
CCCSSSSSSSSSSSKKK
CCCCSSSSSSSSSKKKK
CCCCCSSSSSSSKKKKK
CCCCCCSSSSSKKKKKK
CCCCCCCSSSKKKKKKK
CCCCCCCCSKKKKKKKK

...或3

MMMSDDD
MMSSSDD
MSSSSSD
CSSSSSK
CCSSSKK
CCCSKKK
相关问题