多组输入,一个整数(2~20),表示输出的行数,也表示组成“X”的反斜线和正斜线的长度。
针对每行输入,输出用“*”组成的X形图案。
5
* * * * * * * * *
6
* * * * ** ** * * * *
class Solution : def __init__(self,n) : self.n = n self.O = [] self.k = False def output(self) : self.O = [' ' for i in range(n)] self.O[0],self.O[n - 1] = '*','*' try : for j in range(self.n) : print(''.join(self.O)) if self.k : self.O[self.n - j] = '*' self.k = False self.O[j + 1],self.O[j] = self.O[j],self.O[j + 1] if j + 1 == int(self.n / 2) and self.n % 2 != 0 : self.O[self.n - j - 1] = ' ' self.k = True continue self.O[self.n - j -1],self.O[self.n - j - 2] = self.O[self.n - j - 2],self.O[self.n - j -1] except : return while True : try : n = int(input()) s = Solution(n) s.output() except : break
#include <cstdio> int main() { int n; while(~scanf("%d",&n)) { for(int i=0;i<n;++i)//看成二维数组 { for(int j=0;j<n;++j) { if(i==j||j==n-i-1)//对角线与逆对角线 printf("*"); else printf(" ");//其余 } printf("\n"); } } return 0; }
import java.util.Collections; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()) { int n = sc.nextInt(); boolean flag = true; String str = String.join("",Collections.nCopies(n," ")); for (int i = 0; i < n; i++) { char[] temp = str.toCharArray(); temp[i] = '*'; temp[n-i-1] = '*'; System.out.println(new String(temp)); } } } }
#include<stdio.h> int main() { int i, j, k, n; while (scanf("%d", &n) != EOF) { for (i = 0; i < n; i++) { k = (n - i) - 1; //(n-i):与i相反 for (j = 0; j < n; j++) { if (j == i) printf("*"); else if (j == k) printf("*"); else printf(" "); } printf("\n"); } } return 0; }
#include <iostream> using namespace std; int main() { int n; while (scanf("%d",&n) != EOF) { // 注意 while 处理多个 case for(int a=0;a<n;a++){ for(int b=0;b<n;b++){ if(a==b || a+b == n-1){ //正斜线[a][a]处是*,反斜线[a][n-i-b]处是* printf("*"); } else printf(" "); } printf("\n"); } } }
#include <stdio.h> int main() { int n; while (scanf("%d", &n) != EOF) { int num; if (n % 2 == 0) { num = (n - 2) / 2; for (int i = 1; i <= num; i++) { for (int j = 1; j <= i - 1; j++) //输出首部i-1个空格 { printf(" "); } printf("*"); for (int k = 1; k <=n - 2-2*(i-1);k++) //输出中间n-2个空格 { printf(" "); } printf("*"); for (int j = 1; j <= i - 1; j++) //输出尾部i-1个空格 { printf(" "); } printf("\n"); } for(int count =1;count<=2;count++) { for(int l=1;l<=num;l++) { printf(" "); } printf("**"); for(int l=1;l<=num;l++) { printf(" "); } printf("\n"); } for (int i = 1; i <= num; i++) { for (int j = 1; j <= num - i; j++) //第i行首部输出num-i个空格 { printf(" "); } printf("*"); for (int k = 1; k <= n-2-2*(num-i);k++) //输出中间n-2-2*(num-i)个空格 { printf(" "); } printf("*"); for (int j = 1; j <= num - i; j++) //第i行尾部输出num-i个空格 { printf(" "); } printf("\n"); } } else { num = (n - 1) / 2; for (int i = 1; i <= num; i++) { for (int j = 1; j <= i - 1; j++) { //输出首部i-1个空格 printf(" "); } printf("*"); for (int k = 1; k <= n - 2-2*(i-1);k++) { //输出中间n-2*i个空格 printf(" "); } printf("*"); for (int j = 1; j <= i - 1; j++) { //输出尾部i-1个空格 printf(" "); } printf("\n"); } for(int l=1;l<=num;l++) { printf(" "); } printf("*"); for(int l=1;l<=num;l++) { printf(" "); } printf("\n"); for (int i = 1; i <= num; i++) { for (int j = 1; j <= num - i; j++) { //第i行输出首部num-i个空格 printf(" "); } printf("*"); for (int k = 1; k <= n-2-2*(num-i);k++) { //输出中间2*i个空格 printf(" "); } printf("*"); for (int j = 1; j <= num - i; j++) { //第i行输出尾部num-i个空格 printf(" "); } printf("\n"); } } } }