关于java用二维数组编杨辉三角(具体到步骤)
- 格式:doc
- 大小:31.50 KB
- 文档页数:2
P1:标题大家好!这一节我们来学习二维数组。
P2:写法矩阵是数学当中一个重要的研究对象,在形式上它是这样的一个形式,它的基本特点这儿我就不念了。
那么,每一个矩阵的元素写作这个样子,这是数学写法。
由于矩阵的应用非常广泛,因此我们有必要在计算机当中存储矩阵并做相应的数据处理。
由于在计算机当中计数往往都是从0数起的,因此,对应于数学当中矩阵的这样一个位置关系,在计算机当中安排相应的数组来存放的时候它的形式是这样的,就是左上角的位置上安排的下标是两个0,也就是行下标、列下标都是0,从0数起。
在C语言当中规定一个矩阵元素的写法是带双方括号,其中的第一方括号我们通常说这是行下标,而第二方括号通常说是列下标。
为什么说通常这样说呢?我们下一个画出去看它的存储你就能够理解。
在存储形式上它实际上是没有这种方阵的形式的。
这里先要说明一下,在我们这门课当中只讲解二维数组的情况,对应的是数学上的矩阵,这个概念很容易扩展到3维及更多维的现象,这样的情况我们不在这门课里去介绍。
P3:存储器安排下面我们来看一看刚才所说的为了存储矩阵的各个元素,我需要安排对应的数组,这是二维数组。
那么这些二维数组在内存当中的位置关系又是什么样的呢?这儿有一个很重要的我们称之为叫“行优先”原则,简单地说就是把存放矩阵的一行的那些数组元素,大家可以看到,这一行数组元素它的第一下标、行下标都是0,把一行这样的数组元素集中存放在一块儿。
大家可以看到,这一块儿a数组行下标都是0。
所以我这样标记了一下,说这是它的0号行的所有元素,0号行的。
0号行的元素安排完了之后呢,当然是安排1号行的。
那么对于这一些元素来讲,它的行下标就是1。
这样依次安排下去,最后一直到第m-1行。
从0数起,m-1行是它的最后一行。
那么,在每一行的内部再次按列下标由小到大排列,由0到n-1排列。
P4:定义二维数组——准备内存如何去命令计算机安排刚才所说的那样一个存储情况呢?方式是这样的,这里的方框当中的红字,类型说每一个小格能够存放什么类型的数据。
杨辉三角的编程思路-概述说明以及解释1.引言1.1 概述杨辉三角是一种数学模式,它以二项式系数为基础构成一个三角形状的数字图案。
它的命名源自中国古代数学家杨辉,他在13世纪提出并发展了这一概念。
杨辉三角具有许多有趣的特点和性质,因此在编程领域中备受关注。
它不仅在理论研究中有广泛的应用,还在实际编程中发挥着重要作用。
通过编程生成杨辉三角,我们能够深入了解其生成规律和数值特征。
同时,杨辉三角也为我们提供了一种探索组合数学和数论等领域的途径。
本文将介绍杨辉三角的定义和特点,并讨论其生成方法。
通过分析其规律和结构,我们将揭示编程生成杨辉三角的思路和方法。
最后,我们将总结编程生成杨辉三角的核心思想,并展望它在实际应用中的潜力。
在下一节中,我们将详细讨论杨辉三角的定义和特点,以便更好地理解它的生成过程。
1.2 文章结构文章结构是指文章中各个部分的组织和安排方式,目的是使读者能够清晰地理解文章的主题和内容。
本文以"杨辉三角的编程思路"为主题,下面将介绍一下文章的结构安排。
文章的结构主要由引言、正文和结论三部分组成。
引言部分介绍了文章的背景和目的,包括概述、文章结构和目的。
在概述中,可以简要介绍杨辉三角的概念和应用领域,引起读者的兴趣。
文章结构部分用于明确告诉读者文章的组织方式,让读者对整篇文章的结构有个整体的了解。
目的部分则明确了本文的写作目标,即介绍杨辉三角的编程思路。
正文部分是文章的核心内容,主要包括杨辉三角的定义和特点,以及生成方法。
在2.1部分中,可以首先介绍什么是杨辉三角,它的定义和特点。
然后,可以深入探讨杨辉三角的生成方法,包括使用递推关系、二项式展开式等方法。
可以结合具体的例子和图表,向读者清晰展示杨辉三角的生成过程和特点。
结论部分对文章进行总结,并展望杨辉三角在实际应用中的潜力。
在3.1部分,可以对杨辉三角的编程思路进行一次简洁明了的总结,强调编程过程中需要注意的关键点和思考方式。
实验一java开发环境及语言基础实验目的(1)确保正确配置java开发环境。
(2)了解javac和java命令的使用。
(3)熟悉java中的运算符。
(4)掌握条件语句和循环语句的使用。
(5)掌握通过命令行参数接受数据。
(6)掌握用Scanner类接受数据。
实验内容(1)在控制台中输入java命令,查看输入结果。
(2)编写一个java程序,计算半径为3.0的圆周长和面积并输出结果。
(3)求a+aa+aaa+...+a...a(n个)的和,其中a为1~9之间的整数。
例如,当a=3、n=4时,求3+33+333+3333的和。
(4)给定一个正整数m,统计其位数,分别打印每一位数字,再按照逆序打印出各位数字。
(5)用Scanner类方法输入三角形三边求三角形面积。
实验要求(1)JDK的安装及配置。
(2)在DOS及eclipse下编辑、编译运行第一个java程序:hello world。
(3)求圆周长和面积用方法实现,主函数调用。
(4)从命令行输入1~9之间的整数a,当所求的和大与106时,输出相应的a值及所求的和值。
(5)用Scanner类的方法输入正整数m,m的值不应该超过99999,否则给出错误信息。
应引入包:import java.util.Scanner,然后在需要的方法中实例化对象:Scanner sc = new Scanner(System.in),最后调用对象的next方法,如int n=nextInt(),接受整数。
实验二数组实验目的(1)掌握数组的定义和使用方法。
(2)熟悉数组的排序、查找的方法。
(3)巩固循环的使用。
实验内容(1)使用for循环,将二维数组的行与列互换,即完成矩阵的转置。
(2)编写数组的排序程序。
(3)编写杨辉三角。
实验要求(1)编写一个界面1 选择排序2 冒泡排序3插入排序4 快速排序5 退出当选择1、2、3、4、5的时候完成相应的功能。
(2)杨辉三角形状为等腰三角形实验三字符串实验目的(1)掌握正则表达式的使用。
c语言倒杨辉三角形1. 引言杨辉三角形是中国古代著名数学家杨辉发明的,它是从一个数开始,逐层递增形成的三角形,其中每个数等于它上方两数之和。
杨辉三角形在数学、计算机科学等领域有着广泛的应用。
本文将介绍用C语言编写倒杨辉三角形的实现方法。
2. 程序设计思路要倒着输出杨辉三角形,可以先从正着输出的杨辉三角形入手,然后将它们倒过来。
具体地,可以先计算出正着的杨辉三角形,存储在一个二维数组中;然后,从倒数第二行开始,每一行的每个元素都等于它下方两个元素之和,直到第一行结束。
最后,将倒着的杨辉三角形输出即可。
3. 正着输出杨辉三角形为了方便,我们先来编写正着输出杨辉三角形的代码。
代码如下:```cinclude <stdio.h>define N 10 // 杨辉三角形行数int main() {int a[N][N];// 初始化第一列for (int i = 0; i < N; i++) {a[i][0] = 1;}// 初始化斜对角线以上的元素for (int i = 1; i < N; i++) {for (int j = 1; j < i; j++) {a[i][j] = a[i-1][j-1] + a[i-1][j]; }}// 输出杨辉三角形for (int i = 0; i < N; i++) {for (int j = 0; j <= i; j++) {printf("%5d", a[i][j]);}printf("\n");}return 0;}```代码中,我们定义了一个二维数组a来保存杨辉三角形的每个元素。
首先,我们初始化第一列的元素为1;然后,我们依次计算出斜对角线以上的元素,每个元素都等于它上方两个元素之和。
最后,我们按行输出杨辉三角形。
程序输出如下:```11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 11 6 15 20 15 6 11 7 21 35 35 21 7 11 8 28 56 70 56 28 8 11 9 36 84 126 126 84 36 9 1```4. 倒着输出杨辉三角形接下来,我们来编写倒着输出杨辉三角形的代码。
信息学竞赛辅导习题集习题一1.写出下列算术表达式的结果和数据类型:(1)50 DIV 6 (2)50 MOD 6(3)SQR(SQRT(9)) (4)ROUND(3.75)+TRUNC(3.75)(5)int(3.63)+frac(3.63) (6)(4-3)* 5*(7/2)2.指出下列程序的语法错误,并加以改正:program shu1-shu2;var shu:integer;BEGINwrite(shu1,shu2=);READLN(shul,shu2);shu=shu1-shu2;WRITELN('shu'=;shu)END;3.编写一个程序,已知长方体的长、宽、高,求长方体的全面积和体积。
习题二1.开机引入DOS系统:2.插入TURBOPASCAL盘,引入PASCAL系统;3.观察屏幕顶行的显示(即主菜单)是:——;4.要进入主菜单,应打——键;5.打ALT+E键进入编辑状态,并输入下列程序:PROGRAM SHIXI1:VAR NAME:STRING;BEGINWRITE('A MORE OPEN CHINA AWAITS')WRITELN('2000 OLYPICS')END.6.按ALT+F9键对上面程序进行编译7.按CTRL+F9键运行程序;8.如果要再看显示页,应按——键,请按这个键,把屏幕显示结果写出;9.在上面程序最后(END之前)增加语句READLN,然后再运行,结果与前面有什厶不同?10.选主菜单“FILE”项,再选其中“NEW”子项,按回车键,计算机有什么反应?——,因此NEW的作用是——;习题三1.编一程序,从键盘输入一个真分数的分子和分母,输出它的小数形式,精确到小数点后第20位。
提示:如果我们用变量N表示分子,D表示分母,当从键盘输入这两个值后,程序应判断是否有N<D,如果不满足,应该返回要求重新输入,直到满足为止。
一.实验目的实现杨辉三角和表达式的封装二.实验软件环境本实验是在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算法。
Java经典问题算法大全/*【程序1】题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?1.程序分析:兔子的规律为数列1,1,2,3,5,8,13,21....*//*【程序2】题目:判断101-200之间有多少个素数,并输出所有素数。
1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。
*//*【程序3】题目:打印出所有的"水仙花数(narcissus number)",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。
例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
*//*【程序4】题目:将一个正整数分解质因数。
例如:输入90,打印出90=2*3*3*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
*//*【程序5】题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
1.程序分析:(a>b)?a:b这是条件运算符的基本例子。
*//*【程序6】题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
1.程序分析:利用辗除法。
*//** 在循环中,只要除数不等于0,用较大数除以较小的数,将小的一个数作为下一轮循环的大数,取得的余数作为下一轮循环的较小的数,如此循环直到较小的数的值为0,返回* 较大的数,此数即为最小公约数,最小公倍数为两数之积除以最小公倍数。