Java杨辉三角(金三角)代码 可以根据输入输出相应行数的杨辉三角
- 格式:doc
- 大小:31.00 KB
- 文档页数:2
队列的应用:杨辉三角的输出的原理1. 杨辉三角简介杨辉三角是一种数学图形,在中国古代数学中有重要的地位。
它以数的形式构成的三角形,在图形中的每个位置上的数字是上方两个数字之和。
杨辉三角以数学家杨辉的名字命名,也称为帕斯卡三角。
在程序设计中,通过使用队列的应用,我们可以实现杨辉三角的输出。
2. 队列的概念队列是一种先进先出(FIFO)的数据结构。
它类似于现实生活中排队的场景,先来的人先服务,后来的人后服务。
队列中的元素只能在队列尾部添加,而只能在队列头部删除。
这种特性使得队列在解决许多问题中非常有用,如杨辉三角的输出。
3. 杨辉三角的输出过程杨辉三角的输出可以通过队列来实现。
下面是杨辉三角的输出过程的详细步骤:3.1 创建一个初始队列我们需要创建一个初始的队列,用于存储杨辉三角的每一行的数字。
3.2 将初始队列添加第一行的数值根据杨辉三角的定义,第一行只有一个数字1。
我们将这个数字添加到初始队列中。
3.3 循环生成杨辉三角的每一行从第二行开始,每一行的数字是上一行数字的相邻两个数字之和。
我们可以通过循环来生成每一行的数字,并将这些数字添加到队列中。
3.4 打印队列中的每一行通过遍历队列中的每一行,我们可以按照杨辉三角的格式,将每一行的数字打印出来。
3.5 重复步骤3和步骤4,直到输出指定的行数通过不断循环步骤3和步骤4,我们可以生成并输出指定行数的杨辉三角。
4. 使用队列实现杨辉三角的输出的优势使用队列来实现杨辉三角的输出有以下优势:4.1 简化代码实现通过使用队列,我们可以简化代码实现,减少重复的循环和逻辑判断,使代码更加清晰易懂。
4.2 节省内存空间使用队列的方式可以避免存储整个杨辉三角的所有数字,只需要存储上一行的数字即可,从而减少了内存空间的使用。
4.3 提高代码的可扩展性通过使用队列,我们可以方便地修改程序以输出不同行数的杨辉三角,提高了代码的可扩展性。
结论通过使用队列的应用,我们可以方便地实现杨辉三角的输出。
一.实验目的实现杨辉三角和表达式的封装二.实验软件环境本实验是在MyEclipse 9.01M1编写和运行的三.实验内容(一)实验要求1. 输出杨辉三角前N项,N为参数2. 表达式求值:输入一个表达式,输出它的值,其中要用到java.util.Stack (二)实验代码程序代码:1)杨辉三角:/***功能:用二维数组实现杨辉三角*时间:2011-05-01**/package b1;import java.io.*;public class Pascal{public Pascal(){play();}public void play(){BufferedReader br = new BufferedReader(new InputStreamReader(System.in));System.out.print("请输入n值:");int n = 0;try {n = Integer.parseInt(br.readLine());} catch (NumberFormatException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}int array[][] = new int[n][2*n-1];//判断是否为奇数if( n%2 == 1 ){for(int i=1; i<=n; i++){for(int j=1; j<=2*n-1 ;j++){//首先给前5-i个元素赋值0if(j<=n-i)array[i-1][j-1] = 0;//输出第一个“1”和最后一个“1”else if((j==(n-i+1))||(j==n+i-1))array[i-1][j-1] = 1;else if((j < n+i-1)&&(j > n-i+1)){if((j-i)%2 == 1)array[i-1][j-1] = 0;elsearray[i-1][j-1] = array[i-2][j-2] + array[i-2][j];}}}}//为偶数所进行的操作else{for(int i=1; i<=n; i++){for(int j=1; j<=2*n-1; j++){//首先给前5-i个元素赋值0if(j<=n-i)array[i-1][j-1] = 0;//输出第一个“1”和最后一个“1”else if((j==(n-i+1))||(j==n+i-1))array[i-1][j-1] = 1;else if((j < n+i-1)&&(j > n-i+1)){if((j-i)%2 == 0)array[i-1][j-1] = 0;elsearray[i-1][j-1] = array[i-2][j-2] + array[i-2][j];}}}}/*输出数组*/for(int i=1; i<=n; i++){for(int j=1; j<=2*n-1; j++){if(array[i-1][j-1] == 0){System.out.print(" ");}elseSystem.out.print(array[i-1][j-1]);System.out.print(" ");}System.out.println();}}public static void main(String argc[]){Pascal p = new Pascal();}}2)表达式求值,代码如下:1)Stack类:用来存储表达式子元素的类,代码如下:package btwo;public class Stack {private int maxLen;private int size;private char c[];public Stack(int maxLen) {this.maxLen = maxLen;c = new char[maxLen];size = 0;}public void push(char v){c[size++] = v;}public char pop(){return c[--size];}public boolean isEmpty(){return size == 0;}}2)ExplainPostfix类:实现将输入的表达式转成后缀表达式,代码如下:package btwo; public class ExplainPostfix {String in; String out = "";Stack s;public ExplainPostfix(String in){System.out.println("计算表达式为:"+in);this.in = in;}public void display(){System.out.println("后缀表达式为:"+out);}//转换成后缀表达式public void toPraser(){s = new Stack(in.length());for(int i=0;i<in.length();i++){char c = in.charAt(i);switch(c){case'+':case'-':getOpter(c,1);break;case'*':case'/':getOpter(c,2);break;case'(':s.push(c);break;case')':getParen();break;default:out = out + c;}}while(!s.isEmpty()){out = out + s.pop();}}public void getOpter(char c,int prec1){ out = out + 'a';while(!s.isEmpty()){char optop = s.pop();if(optop == '('){s.push(optop);break;}else{int prec2 = 0;if(optop == '+' || optop== '-'){prec2 = 1;}else{prec2 = 2;}if(prec1>prec2){s.push(optop);break;}else{System.out.println("op:"+optop);out = out + optop;}}}s.push(c);}public void getParen(){while(!s.isEmpty()){char c = s.pop();if(c == '(')break;elseout = out + c;}}public static void main(String[] args) {ExplainPostfix p = newExplainPostfix("(11+2)*5");p.toPraser();p.display();}}3)CalculateExpression类:功能实现将后缀表达式进行计算,代码如下:package btwo;public class CalculateExpression {String in;Stack s; public CalculateExpression(String in) { this.in = in;}public CalculateExpression(){play();}public static void main(String args[]){ExplainPostfix p1 = newExplainPostfix("(21+4)*(1+3*2)");p1.toPraser();p1.display();CalculateExpression p = newCalculateExpression(p1.out);p.doPraser();p.display();}//开始计算后缀表达式public void doPraser(){while(true){int a,b,c,d;a = in.indexOf("+");b = in.indexOf("-");c = in.indexOf("*");d = in.indexOf("/");int n = Math.max(a, b);n = Math.max(n, c);n = Math.max(n, d);if(a != -1){n = a;}if(b<n && b!= -1){n = b;}if(c<n && c!= -1){n = c;}if(d<n && d!= -1){n =d;}if(a == -1 && b == -1 && c == -1 && d == -1){break;}String s1 = charAt(n-1);String s2 =charAt(n-2-s1.length());int v = 0;if(n == a){v = Integer.parseInt(s1) +Integer.parseInt(s2);}else if(n == b){v = Integer.parseInt(s2) -Integer.parseInt(s1);}else if(n == c){v = Integer.parseInt(s2) *Integer.parseInt(s1);}else{v = Integer.parseInt(s2) /Integer.parseInt(s1);}String s = ""+v;if(s.equals("0")){s = "";}else{s = s +"a";}in =in.substring(0,stIndexOf(s2))+v+in.substring(n+1,in.length());}}public void display(){System.out.println("结果为:"+in);}public String charAt(int i){String str = "";char c = in.charAt(i);if(c == '+' || c == '-' || c == '*' || c == '/'){str = str + c;return str;}else{while(c != 'a'){str = c + str ;if(i == 0){break;}c = in.charAt(--i);if(c == '+' || c == '-' || c == '*' || c == '/'){break;}}}return str;}}四.实验的结果及分析1. 杨辉三角结果:2. 算术表达式结果:五.实验心得体会试验后熟悉封装思想,使用基本Java算法。
c语⾔-杨辉三⾓的两种输出⽅法c语⾔对杨辉三⾓的简单实现杨辉三⾓是数字与⼏何的完美融合,杨辉三⾓有着⾮常神奇的排列规律。
下⾯我们来复习以下杨辉三⾓形的特性,并⽤程序来输出杨辉三⾓形。
11 11 2 11 3 3 11 4 6 4 1如上,可以看出⼀个很简单的规律:每个数等于它上⽅两数之和。
每⾏数字左右对称,由1开始逐渐变⼤。
第n⾏的数字有n项。
利⽤这三个规律,我们可以⽤数组来实现杨辉三⾓的排列。
#include <stdio.h>#define N 14void main(){int i, j, k, n, arr[N][N]; /*定义⼆维数组arr[14][14]*/do{printf("请输⼊要打印的⾏数:");scanf("%d",&n);}while(n<=0||n>=N-1); //对打印⾏数进⾏判断,避免越界for(i=1;i<=n;i++)a[i][1] = a[i][i] = 1; //两边的数令它为1,因为现在循环从1开始,就认为a[i][1]为第⼀个数for(i=3;i<=n;i++)for(j=2;j<=i-1;j++)a[i][j]=a[i-1][j-1]+a[i-1][j]; //除两边的数外都等于上⽅两数之和for(i=1;i<=n;i++){for(k=1;k<=n-i;k++)printf(" "); //对打印进⾏排版for(j=1;j<=i;j++)printf("%6d",a[i][j]);printf("\n");}return 0;}以上就是数组对杨辉三⾓的实现,如果不想使⽤数组还可以利⽤以下规律,进⾏直接打印。
第n⾏的m个数可表⽰为 C(n-1,m-1),即为从n-1个不同元素中取m-1个元素的组合数。
c语言杨辉三角形代码杨辉三角形是一种由数字组成的三角形,其中每个数字是它上方两个数字的和。
该三角形以前数学家杨辉的名字命名,其结构如下:11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 1下面以C语言编写一个打印杨辉三角形的代码示例:```c#include <stdio.h>void printYanghuiTriangle(int n) {int triangle[n][n];// 初始化数组元素为0for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {triangle[i][j] = 0;}}// 计算杨辉三角形for (int i = 0; i < n; i++) {triangle[i][0] = 1;triangle[i][i] = 1;if (i >= 2) {for (int j = 1; j < i; j++) {triangle[i][j] = triangle[i - 1][j - 1] + triangle[i - 1][j]; }}}// 打印杨辉三角形for (int i = 0; i < n; i++) {// 添加空格,使三角形居中显示for (int k = 0; k < n - i - 1; k++) {printf(" ");}for (int j = 0; j <= i; j++) {printf("%d ", triangle[i][j]);}printf("\n");}}int main() {int n;printf("请输入杨辉三角形的行数:");scanf("%d", &n);// 打印杨辉三角形printYanghuiTriangle(n);return 0;}```上述代码中,我们定义了一个`printYanghuiTriangle`函数来打印杨辉三角形,并在`main`函数中通过用户输入的行数调用该函数进行打印。
提示:杨辉三角是由一个由数字排列的三角形数字表,特征两侧数字为1,其余每个数值为其正上方元素值与左上方元素值之和。
可用数组array[i][j]=array[i-1][j-1]+array[i-1][j]来表示。
import java.util.Scanner;public class YangHuiTriangle {public static void main(String[] args) {//输入行数System.out.println("请输入杨辉三角的行数:");Scanner ScRows=new Scanner(System.in);final int Rows=ScRows.nextInt();//声明二维数组,设置一维行数为Rows+1int array[][] =new int[Rows+1][];//循环初始化数组for(int i=0;i<=Rows;i++){//设置数组的二位行数array[i]=new int[i+1];}System.out.println("杨辉三角为:");YhTriangle(array,Rows);}//输出杨辉三角public static void YhTriangle(int array[][], int rows) {//行控制for(int i=0;i<=rows;i++){//列控制for(int j=0;j<array[i].length;j++){//赋值给二位数组,将两边的元素赋值为1if(i==0||j==0||j==array[i].length-1)array[i][j]=1;//将其正上方元素与左上角元素之和赋值给此元素中。
elsearray[i][j]=array[i-1][j-1]+array[i-1][j];}}//打印输出杨辉三角for(int i=0;i<=rows;i++){for(int j=0;j<array[i].length;j++){System.out.print(array[i][j]+" ");}System.out.println();}}}。
JavaScript实现杨辉三⾓
杨辉三⾓的算法还是⽐较简单易懂的,只是要想在控制台更好的实现三⾓输出就没那么简单了。
根据⽬前所学,使⽤了⼆维数组实现杨辉三⾓。
每⼀⾏都是⼀个内层数组。
在输出的时候再将每⼀个内层数组转换成字符串来输出,这样就不会出现中括号,看起来就更美观。
要想第⼀⾏居中,就根据所要输出的⾏数来给每⼀个内层数组前⾯添加空格。
⽽且要考虑⾏数越多,下⾯的每⼀个数字的长度就越⼤,然后我就根据最⼤数字的长度来给每⼀个数字后⾯加空格,使每⼀个数字所占的宽度相同,⽅便排列。
我这个⽅法也是假的,不是真正的居中对齐,只是看起来还算整齐,⽽且基本不会受到数字位数的影响。
我还试了使⽤制表符来做,但是空得太宽了,⽽且当数字长度超过四位还是五位的话,也会使⾦字塔变形。
下⾯代码就是根据⽤户输⼊⾏数来给⼆维数组赋值:
下⾯代码是使之成⾦字塔形式输出:
实现的效果:。
前言既然是实现杨辉三角,就要知道什么是杨辉三角。
如下图,就是两种杨辉三角。
(1)等边形状的杨辉三角(2)直角形状的杨辉三角在知道这两种都是杨辉三角之后,我们就来实现利用java语言打印出杨辉三角。
杨辉三角的规律:(1)第n行有n个数字.(2)每一行的开始和结尾数字都为1.用二维数组表示就是a[i][0]=1; a[i][j]=1(当i==j时);(3)第n+1行的第i个数字等于第n行的i-1个数字加上第n行的i个数字。
用二维数组表示就是a[i+1][j]=a[i][j-1]+a[i][j];代码部分(1)创建一个长度为10,宽度为10的二维数组,但赋值和输出时只输出杨辉三角那个范围的数。
首先,我们得理解定义一个长度和高度都为10的二维数组时,他到底做了什么。
数组的图为可以看出,实际是给每个位置上都赋值为0;而我们要做的是给A部分的位置赋值并且输出,而B部分的位置不用管。
A部分与B部分的区别在于:A部分的横坐标大于等于纵坐标。
用数组中的话就是i<=j;知道要赋值的范围,那么for循环的语句就知道了啦,就为而接下来就是利用杨辉三角的特点实现赋值并输出,这里就直接看下面的完整代码吧。
第一种该方法完整代码:最后的实现效果就是下图。
(2)直接创建一个和杨辉三角形状一样的数组再赋值输出。
在前面我们使用了一个长10高10的数组,但是最后我们只用了它的A部分,思考一下,为什么我们不直接创建一个和前面那个A部分形状一样的数组呢?形状如下图:知道基本的概念之后,我们先创建该数组,首先可以确定的是这里的高度还是为10,也就是横坐标最大还是为10,但是纵坐标就是小于等于该行的横坐标。
用代码表示就是:在数组创建好之后,再就是赋值了,之前赋值用的是j<=i,但是此处数组的范围就是杨辉三角的范围,所以可以直接对数组进行内外两层循环。
用代码表示就是:而赋值的代码也是一样,不过这种方法就可以赋值完再输出,不用像第一种一样赋值时输出。
java实现(代码)--⽔仙花数+杨辉三⾓形 1/*2在控制台输出所有的“⽔仙花数”3⽔仙花:100~99945在以上数字范围内:这个数=个位*个位*个位+⼗位*⼗位*⼗位+百位*百位*百位67例如:xyz=x^3 +y^3 +z^389怎么把三位数字拆成每位整数1011思路:百位: int x= i / 10012⼗位: int y = i / 10 % 1013个位: int z = i % 101415*/16class LoopTest3 {17public static void main(String[] args)18 {19for (int i=100; i<=999 ; i++ ){20int x= i / 100;21int y = i / 10 % 10;22int z = i % 10;2324//本⾝的数字是i ,x, y, z是百位⼗位个位25if (i == x* x* x+ y* y* y+ z* z* z){26 System.out.println(i);//i=153,370,371,4072728//153=1^3+ 5^3 +3^3=1 + 125+ 2729 }30 }31 }32 }--------------------------------------------------------------------------------------------------------------------------------1import java.util.Scanner;23/*4杨辉三⾓形:当前⾏的每个元素是当前⾏这个元素的上⼀⾏和上⼀⾏左侧元素的和56分析:78这个题⽬,使⽤了如下的技能点:910 for循环:两个for循环的嵌套11动态数据:这个元素的上⼀⾏和上⼀⾏左侧元素的和12静态数据:每⼀⾏的第⼀列和最后⼀列都是:11314数组的元素可以通过下标索引快速定位,赋值1516⽤两个for 循环控制⼀个⼆维数组得到最终的结果1718⽬的:1920拓展传智学⽣的视野⾯,不要求掌握,需要理解。