多组输入,一个整数(2~20),表示输出的行数,也表示组成“X”的反斜线和正斜线的长度。
针对每行输入,输出用“*”组成的X形图案。
5
* * * * * * * * *
6
* * * * ** ** * * * *
#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");
}
}
}