java编写杨辉三角~~~
杨辉三角线的推理:
杨辉三角形性质:
每行数字左右对称,由 1 开始逐渐变大,然后变小,回到 1。
第 n 行的数字个数为 n 个。
第 n 行数字和为 2^(n-1) 。
每个数字等于上一行的左右两个数字之和。可用此性质写出整个杨辉三角形。
第 n 行的第 1 个数为 1,第二个数为 1× (n-1) ,第三个数为 1× (n-1) × ( n-2) /2,第四个数为 1× (n-1) × (n-2) /2× (n-3) /3…依此类推。
算法原理:
使用一个二维数组 yh[][] 存储杨辉三角形的数据,行和列的大小为所需要输出的行数 Row(本程 序中 Row 为 10)。
使用 for 循环使杨辉三角中除了最外层(不包括杨辉三角底边)的数为 1 ;
使用语句 yh[i][j] = yh[i - 1][j - 1] + yh[i - 1][j] 使第 i 行第 j 列的数据等于第(i-1) 行
第(j-1)列的数据与第(i-1)行第(j)列的数据之和,即每个数字等于上一行的左右两个数字之和。
代码的实现
package com.practice;
public class YangHuiSanJiao
{
public static void main(String[] args) {
int [][]a = new int [10][10];
for(int n = 0; n < 10;n++)
{
a[n][0] = 1;
a[n][n] = 1;
}
for(int n = 2; n <10; n++)
{
for(int j = 1; j < n; j++)
{
a[n][j] = a[n -1][j -1] + a[n - 1][j];
}
}
for(int n = 0; n < 10; n++)
{
for(int k = 0; k < 2 * (10 - n) - 1; k++)
{
System.out.print(" ");
}
for(int j = 0; j <= n; j++)
{
System. out.print(a[n][j] + " ");
}
System.out.println();
}
}
}
初学java,在网上找的杨辉三角形代码并不一地正确和适用,那些代码一般用于集成开发环境,并不适用于初学者。
工具/原料:editplus,jdk,java。
方法/步骤:
打开editplus,点击文件--新建文件--java。不想下这个软件的可以新建一个记事本。
然后把代码复制进去,不过要注意class后面的命名要和文件名字一致
原创代码(非网上照搬复制,个人原创,真实有效):
import java.util.Scanner;
class demo1
{
public static void main(String[] args)
{
System.out.println("请输入杨辉三角的行数");
Scanner in=new Scanner(System.in);
int a=in.nextInt();
int arr[][]=new int[a][a+2];
for (int i=1;i<=a ; i++)
{
arr[i-1][0]=0;
arr[i-1][i+1]=0;
}
if (a==1)
{
System.out.println(" 1 ");
}
if (a==2)
{
System.out.println(" 1 ");
System.out.println(" 1 2 1");
}
else
{
arr[0][1]=1;
for (int j=2;j<=a ;j++ )
{
for (int k=1;k<=j ;k++ )
{
arr[j-1][k]=arr[j-2][k-1]+arr[j-2][k];
}
}
for (int i=1;i<=a ;i++ )
{
for (int space=0;space<=a-i ;space++ )
{
System.out.print(" ");
}
for (int j=1;j<=i ;j++ )
{
System.out.print(arr[i-1][j]+" ");
}
System.out.println();
}
}
}
}
以editplus为例,把代码复制进去后,点击文件--保存--D盘,文件名为demo1.java。 如果用记事本保存为--所有类型文件--demo1.java。
打开开始菜单,输入cmd
输入d:
进入d盘
输入javac demo1.java 编译,如果没有弹出什么则说明编译成功。
输入java demo1
然后就OK了
public class Test {
public static void main(String args[]) {
int a = 10;
int b[][];
b = new int[a][];
for (int i = 1; i <= 10; i++) {
b[i - 1] = new int[i];
}
for (int j = 0; j < 10; j++) {
for (int k = 0; k <= j; k++) {
if (j == 0 || k == 0 || k == j)// 分支
{
b[j][k] = 1;// 等于1的
continue;
} else {
b[j][k] = b[j - 1][k - 1] + b[j - 1][k];// 计算值
}
}
}
for (int m = 0; m < 10; m++) {
for (int n = 0; n <= m; n++) {
System.out.print(b[m][n] + " ");// 循环输出
}
System.out.println(" ");
}
}
}
好巧我也写这个作业
public class Demo12 {
public static void main(String[] args){
printYH();
}
private static void printYH() {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个整数代表几行");
int n = sc.nextInt();
//创建二维数组
int[][] arr = new int[n][n];
for (int i = 0; i < arr.length; i++) {
arr[i] = new int[i+1];
}
//赋值
for (int i = 0; i < arr.length; i++) {
arr[i][0] = 1;
arr[i][i] = 1;
for (int j = 1; j < i; j++) {
arr[i][j] = arr[i-1][j]+arr[i-1][j-1];
}
}
//打印
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j]+"\t");
}
System.out.println();
}
}
}