BC68 X形图案

方法一:数组存储法(稳定兼容版)

该方法通过二维数组作为临时容器,先初始化填充空格,再绘制斜线,最后遍历数组输出。核心优势是逻辑清晰、可复用图案,适配所有编译器,适合需要后续修改图案的场景。

核心思路

  1. 定义固定长度二维数组:用#define定义常量数组长度,避免变长数组(VLA)的兼容问题,确保在VS等编译器中正常运行。

  2. 初始化数组:将数组前n行n列填充为1个空格,保证非斜线位置格式正确,避免因'\0'或多余空格导致格式错误。

  3. 绘制两条斜线:分别遍历数组,将满足i==j和i+j==n-1的位置赋值为'*'。

  4. 按行输出:遍历数组打印每个元素,每行结束后换行,严格控制输出格式。

  5. 多组输入:用while循环包裹核心逻辑,通过scanf返回值判断输入是否结束(成功读取返回1,EOF终止)。

cpp 复制代码
#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>

// 定义数组最大长度(根据题目约束调整,20足够覆盖多数场景)
#define MAX_SIZE 20

int main() {
    int n;
    // 多组输入:scanf读取成功则继续,遇到EOF(Ctrl+Z/Ctrl+D)终止
    while (scanf("%d", &n) == 1) {
        // 1. 定义固定长度二维数组(常量长度,兼容所有编译器)
        char c[MAX_SIZE][MAX_SIZE];

        // 2. 初始化数组:前n行n列填充1个空格,避免格式错误
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                c[i][j] = ' '; // 仅1个空格,严格匹配列数要求
            }
        }

        // 3. 绘制X形的两条斜线
        // 斜线1:行号=列号(i==j)
        for (int i = 0; i < n; i++) {
            c[i][i] = '*';
        }
        // 斜线2:行号+列号 = n-1(i+j == n-1)
        for (int i = 0; i < n; i++) {
            c[i][n - 1 - i] = '*';
        }

        // 4. 按行输出,严格控制格式
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                printf("%c", c[i][j]); // 仅打印数组内容,无额外输出
            }
            printf("\n"); // 每行仅1次换行,无多余换行
        }
    }
    return 0;
}

方法二:实时打印法(简洁高效版)

该方法无需数组存储,直接通过双重循环遍历每个位置,实时判断是否为斜线位置,进而打印*或空格。核心优势是代码简洁、无额外内存占用,格式风险极低,是BC68题目的最优解。

1. 核心思路

  1. 多组输入控制:同样用while(scanf("%d", &n) == 1)实现多组输入,逻辑与数组版一致。

  2. 双重循环遍历:外层循环控制行数(i从0到n-1),内层循环控制列数(j从0到n-1)。

  3. 实时判断打印:对每个(i,j)位置,判断是否满足i==j或i+j==n-1,是则打印'*',否则打印1个空格。

  4. 换行控制:每行遍历结束后打印1次换行,确保格式正确。

该方法跳过数组存储的中间步骤,"边判断边输出",从根源减少格式错误和内存占用

cpp 复制代码
#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>

int main() {
    int n;
    // 多组输入:持续读取n,直到EOF终止
    while (scanf("%d", &n) == 1) {
        // 外层循环控制行数
        for (int i = 0; i < n; i++) {
            // 内层循环控制列数,实时判断打印
            for (int j = 0; j < n; j++) {
                if (i == j || i + j == n - 1) {
                    printf("*"); // 斜线位置打印*
                } else {
                    printf(" "); // 非斜线位置打印1个空格
                }
            }
            printf("\n"); // 每行结束仅1次换行
        }
    }
    return 0;
}

相似题目:

cpp 复制代码
#include <stdio.h>

int main() {
    int n = 0;
    while (scanf("%d", &n) != EOF) { // 注意 while 处理多个 case
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < n; j++)
            {

                if (i == 0 || j == 0 || i == n - 1 || j == n - 1)
                    printf("* ");
                else
                    printf("  ");
            }
            printf("\n");

        }


    }
    return 0;
}
相关推荐
仟濹4 分钟前
算法打卡 day1 (2026-02-06 周四) | 算法: DFS | 1_卡码网98 可达路径 | 2_力扣797_所有可能的路径
算法·leetcode·深度优先
yang)4 分钟前
欠采样时的相位倒置问题
算法
历程里程碑8 分钟前
Linux20 : IO
linux·c语言·开发语言·数据结构·c++·算法
A尘埃10 分钟前
物流公司配送路径动态优化(Q-Learning算法)
算法
天若有情67311 分钟前
【自研实战】轻量级ASCII字符串加密算法:从设计到落地(防查岗神器版)
网络·c++·算法·安全·数据安全·加密
DeeplyMind21 分钟前
第七章:数据结构大比拼
数据结构·计算机科学·少儿编程·少儿科技读物
元亓亓亓22 分钟前
考研408--数据结构--day8--遍历序列&线索二叉树
数据结构·考研·408·线索二叉树
xiaoxue..28 分钟前
合并两个升序链表 与 合并k个升序链表
java·javascript·数据结构·链表·面试
啊森要自信1 小时前
CANN ops-cv:AI 硬件端视觉算法推理训练的算子性能调优与实战应用详解
人工智能·算法·cann
仟濹1 小时前
算法打卡day2 (2026-02-07 周五) | 算法: DFS | 3_卡码网99_计数孤岛_DFS
算法·深度优先