打印数字 蓝桥杯Java

博客介绍了一个有趣程序,给定一串数字,能输出这串数字拼出放大的样子,如“2016”有特定放大输出样式,要求仔细分析代码并填写划线部分缺少的内容,涉及类型强制转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

只涉及一个类型强制转换
/*

打印数字

小明写了一个有趣的程序,给定一串数字。
它可以输出这串数字拼出放大的自己的样子。

比如“2016”会输出为:
22222 00000 1 6666
2 2 0 0 1 1 6
2 0 0 1 666666
2 0 0 1 6 6
2 0 0 1 6 6
2 2 0 0 1 6 6
2222222 00000 1111 66666

请仔细分析代码,填写划线部分缺少的内容。

*/

public class Test3 {
	static void f(int n)
	{
		String[][] di = 
	{{" 00000 ",
	"0     0",
	"0     0",
	"0     0",
	"0     0",
	"0     0",
	" 00000 "},
	{"     1 ",
	"   1 1 ",
	"     1 ",
	"     1 ",
	"     1 ",
	"     1 ",
	"   1111"},
	{" 22222 ",
	"2     2",
	"      2",
	"     2 ",
	"   2   ",
	" 2    2",
	"2222222"},
	{" 33333 ",
	"3     3",
	"      3",
	"  3333 ",
	"      3",
	"3     3",
	" 33333 "},
	{"   44  ",
	"  4 4  ",
	" 4  4  ",
	"4   4  ",
	"4   4  ",
	"4444444",
	"    4  "},
	{" 55555 ",
	" 5     ",
	"555555 ",
	"      5",
	"      5",
	"5     5",
	" 55555 "},
	{" 6666  ",
	"6      ",
	"666666 ",
	"6     6",
	"6     6",
	"6     6",
	" 66666 "},
	{"7777777",
	"7    7 ",
	"    7  ",
	"   7   ",
	"  7    ",
	" 7     ",
	" 7     "},
	{" 88888 ",
	"8     8",
	"8     8",
	" 88888 ",
	"8     8",
	"8     8",
	" 88888 "},
	{" 99999 ",
	"9     9",
	"9     9",
	" 999999",
	"      9",
	"9     9",
	" 99999 "}};
		               
		char[] cc = (""+n).toCharArray(); 
		        
		for(int i=0; i<di[0].length; i++){
			for(int j=0; j<cc.length; j++){
				System.out.print(di[cc[j]-'0'][i] + " ");  //填空位置
			}
			System.out.println();
		}	
	}
	
	public static void main(String[] args)
	{
		f(2016);
	}
}
### 蓝桥杯数字三角形问题的Java实现与解题思路 对于蓝桥杯中的数字三角形问题,核心在于找到从顶部到底部路径上数值之和最大的一条路线。此问题可以通过动态规划的方法高效求解。 #### 动态规划方法解析 考虑到每一步可以沿着左斜线或者右斜线下移,在遍历过程中记录到达当前位置时能够获得的最大累积值。通过自底向上更新的方式简化计算过程[^2]: - 对于最底层的数据保持不变; - 自倒数第二层起始逐层向前推进直至顶端; - 更新规则为当前节点加上其下方两个子节点中较大者的价值; - 最终位于顶层位置存储的就是所求的结果。 具体来说,状态转移方程如下所示: \[ dp[i][j]=triangle[i][j]+max(dp[i+1][j],dp[i+1][j+1]) \] 其中 \( triangle[i][j] \) 表示原始输入矩阵对应元素,而 \( dp[i][j] \) 则表示经过处理后的最优解表单相应位置上的数据[^3]。 下面是基于上述逻辑编写的完整代码片段: ```java import java.util.*; public class Main { public static void main(String[] args){ Scanner sc=new Scanner(System.in); int rows=sc.nextInt(); // 获取行数 List<List<Integer>> triagle = new ArrayList<>(); for(int i=0;i<rows;++i){ List<Integer> rowList = new ArrayList<>(); for(int j=0;j<=i;++j){ rowList.add(sc.nextInt()); } triagle.add(rowList); } // 初始化DP表格并填充最后一行 Integer[][] dp =new Integer[rows][]; for (int r = 0; r < rows; ++r) { dp[r] = Arrays.copyOf(triagle.get(r).toArray(new Integer[0]),triagle.get(r).size()); } // 倒序迭代除最后一行外的所有其他行 for (int r = rows - 2; r >= 0 ; --r) { for (int c = 0; c <= r; ++c) { dp[r][c] += Math.max(dp[r + 1][c], dp[r + 1][c + 1]); } } System.out.println(dp[0][0]); // 打印最终结果即最大总和 } } ``` 这段程序首先读取输入构建了一个二维列表形式的三角形结构`triagle`,接着创建同样大小但用于保存中间运算结果的数组`dp`.最后按照既定策略完成各阶段的状态转换直到得出全局最优解.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值