一.提出问题。
使用二维数组打印出如下图的杨辉三角。

二.分析问题。
1.首先想要输出杨辉三角,就要找到它有什么规律?
①第n行有n个数字;
②每一行开始和结束的数字都为1;
③每一个数字都等于它的左上角的数字与右上角数字之和。
2.其次题目要使用二维数组打印杨辉三角,我们该如何用二维数组表示?
我们可以创建一个二维数组,来表示杨辉三角的行和列。空白的位置我们可以用数字0表示。通过题目所给出的图,我们可以看出,这是一个10行,21列的杨辉三角。
//创建二维数组
int[][] arr=new int[10][21];

得到这个初始二维数组,我们可以根据杨辉三角的规律进行遍历赋值。
3.如何给二维数组赋值?
有题目给出的图片可得,第一行只有一个数字且永远为1,所以我们可以先给第一行进行赋值,然后根据规律向下展开赋值。
赋值时要注意杨辉三角行和列的表示与二维数组索引的关系。索引是从0开始的,所以第n行应该是n-1;
//对第一行最中间的数赋值
arr[0][10]=1;
//根据杨辉三角的规律,使用二维数组遍历,赋值
for(int i=1;i< arr.length;i++){//第一行已经赋值,所以从第2行开始到第10行
for(int j=1;j<arr[i].length-1;j++){//由于每一行的最左列和最右列分别没有左上值和右上值,所以每一行的遍历应从第2列开始到第20列
arr[i][j]=arr[i-1][j-1]+arr[i-1][j+1];//杨辉三角中的值等于它的左上角的值+右上角的值。
}
}

4.经过第三步给二维数组赋值之后,我们应如何输出这个杨辉三角呢?
将第三步得出的二维数组与题目所给的杨辉三角进行比较后发现,输出时,为0的话不能输出,要用空格代替,输出不为零的数。
//遍历输出杨辉三角
for(int i=0;i< arr.length;i++){ //从第一个一维数组开始
for(int j=0;j<arr[i].length;j++){//输出第i个一维数组中的值
if(arr[i][j]!=0){ //如果值不等于零时,将它输出
System.out.print(arr[i][j]+" ");
}else{ //如果值等于零,用空格代替
System.out.print(" ");
}
}
System.out.println();
}

得出此杨辉三角我们发现,这并不是一个等边三角形,所以此时我们需要使用“\t”来代替“ ”;
"\t"相当于表格制表符tab键,一个格内放8的整数倍的字符,根据显示的字符串长度,剩下的显示空格数。
三.解决问题。
经过一系列的分析,我们可以得到解决这个问题的完整代码:
public class Yhsanjiao {
public static void main(String[] args) {
//第一步:创建二维数组
int[][] arr=new int[10][21];
//第二步:根据杨辉三角的规律,对二维数组遍历赋值
//给第一行最中间赋值1
arr[0][10]=1;
for(int i=1;i< arr.length;i++){
//每一行从第二个数开始到倒数第二个结束,因为最左边没有左上的值,最右边没有右上的值都为0
for(int j=1;j<arr[i].length-1;j++){
//杨辉三角中的值等于它的左上角的值+右上角的值。
arr[i][j]=arr[i-1][j-1]+arr[i-1][j+1];
}
}
//第三步:遍历输出杨辉三角
//从第一个一维数组开始
for(int i=0;i< arr.length;i++){
//输出第i个一维数组中的值
for(int j=0;j<arr[i].length;j++){
//如果值不等于零时,将它输出
if(arr[i][j]!=0){
System.out.print(arr[i][j]+"\t");
//如果值等于零,用空格代替
}else{
System.out.print(" \t");
}
}
System.out.println();
}
}
}

四.代码优化。
以上题目需要输出一个10层的等边杨辉三角,我们可以对层数进行一个输入,这样需要几层输入几层就可以。
import java.util.Scanner;
public class Yhsanjiao {
public static void main(String[] args) {
Scanner s=new Scanner(System.in);
System.out.println("请输入杨辉三角的层数:");//为了输出美观,层数不要超过13.若层数需要超过13,可以通过添加输出杨辉三角中的"\t"来运行。
int row=s.nextInt();//输入一个杨辉三角的层数。
//确定二维数组的长度
/*
这个二维数组中有row个一维数组;
因为通过杨辉三角的规律,第零行有一个值,第一行有三个值(包含0),第二行有五个值以此类推,第row行有2*row+1个值;
所以每个一维数组的长度为2*row+1;
*/
int[][] arr=new int[row][2*row+1];
//给第一行最中间赋值1
arr[0][row]=1;
//将杨辉三角中的数表示出来 第一行arr[0][row]直接赋值,所以从第二行开始
for(int i=1;i< arr.length;i++){
//每一行从第二个数开始到倒数第二个结束,因为最左边没有左上的值,最右边没有右上的值都为0
for(int j=1;j<arr[i].length-1;j++){
//杨辉三角中的值等于它的左上角的值+右上角的值。
arr[i][j]=arr[i-1][j-1]+arr[i-1][j+1];
}
}
//遍历输出杨辉三角
//从第一个一维数组开始
for(int i=0;i< arr.length;i++){
//输出第i个一维数组中的值
for(int j=0;j<arr[i].length;j++){
//如果值不等于零时,将它输出
if(arr[i][j]!=0){
System.out.print(arr[i][j]+"\t");
//如果值等于零,用空格代替
}else{
System.out.print(" \t");
}
}
System.out.println();
}
}
}

我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden
几个月前,我读了一篇关于rubygem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:
我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www
我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht
华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o
?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------
这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/