当前位置: 首页 > news >正文

「Java案例」打印数字金字塔

案例解析

数字金字塔打印

编写程序,输入金字塔图案的行数,打印如下图所示的金字塔。
例如,输入行数3时,

        1   1   2   1   
1   2   4   2   1   

实现代码

# 源文件保存为“NumberPyramid.java”
import java.util.Scanner;public class NumberPyramid {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.print("请输入金字塔的行数:");int rows = scanner.nextInt();for (int i = 1; i <= rows; i++) {// 打印前导空格for (int j = 1; j <= rows - i; j++) {System.out.print("    "); // 4个空格保持对齐}// 打印左半边数字(1,2,4,8...)for (int k = 1; k <= i; k++) {System.out.printf("%-4d", (int)Math.pow(2, k-1));}// 打印右半边数字(...4,2,1)for (int l = i-1; l >= 1; l--) {System.out.printf("%-4d", (int)Math.pow(2, l-1));}System.out.println(); // 换行}scanner.close();}
}

代码解析:

  • 输入处理:使用Scanner获取用户输入的金字塔行数
  • 外层循环:控制金字塔的行数(从1到rows)
  • 前导空格:每行前导空格数为总行数减当前行数,保持金字塔形状
  • 左半边数字:数字按2的幂次递增(1, 2, 4, 8…)
  • 右半边数字:数字按2的幂次递减(…4, 2, 1)
  • 格式化输出:使用printf和%-4d保持数字对齐,每个数字占4个字符宽度

运行示例(输入3):

        1    1   2   1    
1   2   4   2   1    

字母金字塔

# 源文件保存为“AlphabetPyramid.java”
public class AlphabetPyramid {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.print("请输入金字塔的行数:");int rows = scanner.nextInt();for (int i = 1; i <= rows; i++) {// 打印前导空格for (int j = 1; j <= rows - i; j++) {System.out.print("  "); // 2个空格}// 打印左半边字母(A,B,C...)for (char k = 'A'; k < 'A' + i; k++) {System.out.print(k + " ");}// 打印右半边字母(...B,A)for (char l = (char)('A' + i - 2); l >= 'A'; l--) {System.out.print(l + " ");}System.out.println();}scanner.close();}
}

运行结果

请输入金字塔的行数:3A A B A 
A B C B A 

代码特点:

  • 打印字母金字塔而非数字
  • 使用字符运算生成字母序列
  • 更简单的空格处理(2个空格)
  • 输出示例(行数=3):

乘法表金字塔

# 源文件保存为“MultiplicationPyramid.java”
public class MultiplicationPyramid {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.print("请输入金字塔的行数:");int rows = scanner.nextInt();for (int i = 1; i <= rows; i++) {// 打印前导空格for (int j = 1; j <= rows - i; j++) {System.out.print("    ");}// 打印左半边for (int k = 1; k <= i; k++) {System.out.printf("%-4d", k * i);}// 打印右半边for (int l = i-1; l >= 1; l--) {System.out.printf("%-4d", l * i);}System.out.println();}scanner.close();}
}

运行结果

请输入金字塔的行数:31   2   4   2   
3   6   9   6   3  

代码特点:

  • 打印乘法表形式的金字塔
  • 每行数字是该行号与列号的乘积
  • 输出示例(行数=3):

操作练习题

斐波那契金字塔

要求:

  • 将数字规律改为斐波那契数列
  • 第一行:1
  • 第二行:1 1 1
  • 第三行:1 1 2 1 1
  • 第四行:1 1 2 3 2 1 1

参考代码:

# 源文件保存为“FibonacciPyramid.java”
public class FibonacciPyramid {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.print("请输入金字塔的行数:");int rows = scanner.nextInt();for (int i = 1; i <= rows; i++) {// 打印前导空格for (int j = 1; j <= rows - i; j++) {System.out.print("    ");}// 生成斐波那契数列int[] fib = new int[i];fib[0] = 1;if (i > 1) fib[1] = 1;for (int k = 2; k < i; k++) {fib[k] = fib[k-1] + fib[k-2];}// 打印左半边for (int k = 0; k < i; k++) {System.out.printf("%-4d", fib[k]);}// 打印右半边for (int l = i-2; l >= 0; l--) {System.out.printf("%-4d", fib[l]);}System.out.println();}scanner.close();}
}

运行结果

请输入金字塔的行数:41   1   1   1   1   1   2   1   1   
1   1   2   3   2   1   1 

空心数字金字塔

要求:

  • 只打印金字塔的边框数字
  • 内部用空格填充
  • 例如(行数=3):
        1   1   2   1   
1   2   4   2   1

参考代码:

# 源文件保存为“HollowPyramid.java”
public class HollowPyramid {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.print("请输入金字塔的行数:");int rows = scanner.nextInt();for (int i = 1; i <= rows; i++) {// 打印前导空格for (int j = 1; j <= rows - i; j++) {System.out.print("    ");}// 打印左半边for (int k = 1; k <= i; k++) {if (k == 1 || k == i || i == rows) {System.out.printf("%-4d", (int)Math.pow(2, k-1));} else {System.out.print("    ");}}// 打印右半边for (int l = i-1; l >= 1; l--) {if (l == 1 || l == i || i == rows) {System.out.printf("%-4d", (int)Math.pow(2, l-1));} else {System.out.print("    ");}}System.out.println();}scanner.close();}
}
http://www.lryc.cn/news/583014.html

相关文章:

  • [Backlog] 核心协调器 | 终端用户界面(TUI)实现 | 多分支任务冲突解决 | 测试验证体系
  • 技术支持丨解决 ServBay 在 Windows 启动时反复提示安装 .NET 的问题
  • Python(30)基于itertools生成器的量子计算模拟技术深度解析
  • 使用LLaMA-Factory微调Qwen2.5-VL-3B 的目标检测任务-数据集格式转换(voc 转 ShareGPT)
  • 【洛谷题单】--顺序结构(一)
  • C++高频知识点(六)
  • [NOIP][C++]洛谷P1376 [USACO05MAR] Yogurt factory 机器工厂
  • LeetCode--42.接雨水
  • C++(STL源码刨析/vector)
  • 从历史航拍图像中去除阴影
  • 11款常用C++在线编译与运行平台推荐与对比
  • 力扣-75.颜色分类
  • Web后端开发-Mybatis
  • qt-C++笔记之setCentralWidget的使用
  • 软件系统测试的基本流程
  • 数据结构*搜索树
  • 从零开始手写嵌入式实时操作系统
  • 牛市来临之际,如何用期权抢占反弹先机?
  • 初识mysql(一)
  • [特殊字符] AlphaGo:“神之一手”背后的智能革命与人机博弈新纪元
  • 【深度学习新浪潮】什么是蛋白质反向折叠模型?
  • 深度学习超参数优化(HPO)终极指南:从入门到前沿
  • FairyGUI 实现 Boss 双层血条动画
  • qt-C++语法笔记之Stretch与Spacer的关系分析
  • 分库分表之实战-sharding-JDBC水平分库+水平分表配置实战
  • LeetCode题解---<三数之和>
  • 自动化一次通过率
  • 深度学习环境配置:PyTorch、CUDA和Python版本选择
  • 深度剖析:向70岁老系统植入通信芯片——MCP注入构建未来级分布式通信
  • 模型训练篇 | 如何用YOLOv13训练自己的数据集(以明火烟雾检测举例)