当前位置: 面试刷题>> 打印X (经典算法题500道)


完整题目描述

题目: 打印X形状

题目要求

给定一个整数 nn 为奇数),使用编程语言(如 PHP、Python、JavaScript)编写一个程序,以打印出一个由星号(*)组成的X形状,其中X的高度和宽度都基于 n 的值。X形状的中心在图形的正中央,且其四个角应触及图形的边界。

示例

如果 n = 5,则打印出的X形状如下:

*****
 *   *
  * *
   *
*****

PHP 代码示例

<?php
function printX($n) {
    if ($n % 2 == 0) {
        echo "n must be odd.";
        return;
    }

    // 上半部分
    for ($i = 0; $i < $n; $i++) {
        for ($j = 0; $j < $n; $j++) {
            // 打印X的上半部分
            if ($i == 0 || $i == $n - 1 || $j == 0 || $j == $n - 1 || $i == $j || $i + $j == $n - 1) {
                echo "*";
            } else {
                echo " ";
            }
        }
        echo "\n";
    }

    // 下半部分,除了第一行和最后一行
    for ($i = $n - 2; $i > $n / 2; $i--) {
        for ($j = 0; $j < $n; $j++) {
            // 打印X的下半部分
            if ($j == $i || $j == $n - $i - 1) {
                echo "*";
            } else {
                echo " ";
            }
        }
        echo "\n";
    }
}

// 示例
$n = 5;
printX($n);
?>

Python 代码示例

def print_x(n):
    if n % 2 == 0:
        print("n must be odd.")
        return

    # 上半部分
    for i in range(n):
        for j in range(n):
            if i == 0 or i == n-1 or j == 0 or j == n-1 or i == j or i + j == n - 1:
                print("*", end="")
            else:
                print(" ", end="")
        print()

    # 下半部分,除了第一行和最后一行
    for i in range(n-2, n//2, -1):
        for j in range(n):
            if j == i or j == n - i - 1:
                print("*", end="")
            else:
                print(" ", end="")
        print()

# 示例
n = 5
print_x(n)

JavaScript 代码示例

function printX(n) {
    if (n % 2 === 0) {
        console.log("n must be odd.");
        return;
    }

    // 上半部分
    for (let i = 0; i < n; i++) {
        let line = '';
        for (let j = 0; j < n; j++) {
            if (i === 0 || i === n - 1 || j === 0 || j === n - 1 || i === j || i + j === n - 1) {
                line += '*';
            } else {
                line += ' ';
            }
        }
        console.log(line);
    }

    // 下半部分,除了第一行和最后一行
    for (let i = n - 2; i > Math.floor(n / 2); i--) {
        let line = '';
        for (let j = 0; j < n; j++) {
            if (j === i || j === n - i - 1) {
                line += '*';
            } else {
                line += ' ';
            }
        }
        console.log(line);
    }
}

// 示例
let n = 5;
printX(n);

注意: 上述代码中的 print_xprintX 函数和PHP中的 printX 函数都实现了打印X形状的功能,但是请注意JavaScript和Python的示例使用了控制台输出来显示结果,而PHP示例则直接输出了HTML格式的换行符。此外,为了简化,这些代码示例没有处理非奇数输入的额外逻辑(尽管PHP示例中有提及),但在实际应用中可能需要添加更详细的错误处理。

推荐面试题