多组输入,一个整数(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; }
import java.util.Scanner; public class printX { public static void main(String[] args) { // 创建一个 Scanner 对象,用于读取用户输入 Scanner in = new Scanner(System.in); // 使用 hasNextInt() 来判断是否有整数输入,多组输入 while (in.hasNextInt()) { // 读取输入的行数 row int row = in.nextInt(); // 外层循环控制行数 i,从 0 到 row-1 for (int i = 0; i < row; i++) { // 内层循环控制列数 j,从 0 到 row-1 for (int j = 0; j < row; j++) { // 如果当前行和列相等,则打印反斜线部分 "*" if (i == j || i + j == row - 1) { System.out.print("*"); } else { // 否则打印空格 System.out.print(" "); } } // 每打印完一行需要换行 System.out.println(); } } } }
#include <stdio.h> int main() { int n = 0; while ((scanf("%d", &n)) != EOF) { int arr[] = { 0 }; int i = 0; for (i = 0; i < n; i++) { arr[i] = '*'; } int left = 0; int right = n - 1; while (right != -1) { for (i = 0; i < n; i++) { if (i != left && i != right) { printf(" "); } else { printf("%c", arr[i]); } } printf("\n"); left++; right--; } } return 0; }
/*思路 可以借鉴二维数组的方式来打印 星星和空格 看成i行 j列 由题目输出示例可以看出 当i==j的时候 打印一个斜列 当i+j==n-1的时候 再打印一个斜列 */ # include <stdio.h> int main () { int n = 0; while(scanf("%d",&n)!=EOF) { int i = 0; //控制行 for(i = 0; i < n; i++) { int j = 0; //控制列 //for(j = 0; j < i; j++) error //这里 j<i 是错误的 因为这里要根据n的值来进行判断 而不是根据i for(j = 0; j < n; j++) { //使用if判断 条件如下 //当i==j的时候 打印一个斜列 //当i+j==n-1的时候 再打印一个斜列 if (i==j||i+j==n-1) { printf("*"); } else { printf(" "); } } printf("\n"); } } return 0; }
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> int main() { int n = 0; int i = 0; int j = 0; while (scanf("%d", &n) != EOF) { for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { //正反对角线为*,其余为空格 if (i == j || i + j == n - 1) { 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"); } } }