打印杨辉三角形
用二维数组打印出杨辉三角

⽤⼆维数组打印出杨辉三⾓⽤⼆维数组打印出杨辉三⾓⾸先你得知道⼆位数组和熟练⼆位数组,再次你得知道杨辉三⾓的规律!相信能知道这个的,你已经掉了半只脚在这个坑了,不说废话直接上。
针对Javascript掌握基础的:在电脑输⼊cmd命令打开控制器先要创建node'.js的环境:你得把这个⽂件夹和你的js⽂件放在⼀起!js代码如下:1 let readline = require("readline-sync");2 console.log("请输⼊杨辉三⾓的⾏数:");3 let line = parseInt(readline.question(""));4 console.log("杨辉三⾓如下:***************************************************");5 let strSpace = "";//⽤于存储空格的字符串6 let strNum = "";//⽤于存储杨辉三⾓的字符串78 let arr = new Array(line);//创建⼀维数组910//创建⼆维数组11for (let i = 0; i < arr.length; i++)12 {13 arr[i] = new Array(i + 1);14 }15//控制⼆维数组的⾏数16for (let i = 0; i < arr.length; i++)17 {18for (let k = 1; k < line - i; k++) //控制前⾯空格数量19 {20 strSpace = strSpace + " ";21 }22for (let j = 0; j < arr[i].length; j++)23 {24//判断每⾏的数组的第⼀个和最后⼀个都为125if (j == 0 || i == j)26 {27 arr[i][j] = 1;28 }29else//规律,⾥⾯数字的规律30 {31 arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];3233 }34 strNum += arr[i][j] + " ";//把数组放在字符串35 strNum += " " + " "; //在累加空格36 }37 console.log(strSpace + strNum);38//下⾯是每次循环清空39 strNum = "";40 strSpace = "";41 }直接可以在这⾥输⼊cmd 打开控制器然后输⼊node ⽂件名(注意node后⾯有空格)输⼊⾏数打印的效果如下:上⾯就是整个流程,当然也还有简单的操作!我这⾥只是把我⾃⼰对⼆位数组的理解,以及⼀个简单的双循环!⼩⼩⼩尾巴@原创。
[程序61]题目打印出杨辉三角形(要求打印出10行如下图)
![[程序61]题目打印出杨辉三角形(要求打印出10行如下图)](https://img.taocdn.com/s3/m/804acd1d5f0e7cd184253660.png)
} getch(); } 【程序 65】 题目:一个最优美的图案。 1.程序分析: 2.程序源代码: #include "graphics.h" #include "math.h" #include "dos.h" #include "conio.h" #include "stdlib.h" #include "stdio.h" #include "stdarg.h" #define MAXPTS 15 #define PI 3.1415926 struct PTS { int x,y; }; double AspectRatio=0.85; void LineToDemo(void) { struct viewporttype vp; struct PTS points[MAXPTS]; int i, j, h, w, xcenter, ycenter; int radius, angle, step; double rads; printf(" MoveTo / LineTo Demonstration" ); getviewsettings( &vp ); h = vp.bottom - vp.top; w = vp.right - vp.left; xcenter = w / 2; /* Determine the center of circle */ ycenter = h / 2; radius = (h - 30) / (AspectRatio * 2); step = 360 / MAXPTS; /* Determine # of increments */ angle = 0; /* Begin at zero degrees */ for( i=0 ; i<MAXPTS ; ++i ){ /* Determine circle intercepts */ rads = (double)angle * PI / 180.0; /* Convert angle to radians */ points[i].x = xcenter + (int)( cos(rads) * radius ); points[i].y = ycenter - (int)( sin(rads) * radius * AspectRatio ); angle += step; /* Move to next increment */ } circle( xcenter, ycenter, radius ); /* Draw bounding circle */ for( i=0 ; i<MAXPTS ; ++i ){ /* Draw the cords to the circle */
递归函数打印杨辉三角形

递归函数打印杨辉三角形
杨辉三角形是一个有趣的数学图形,它由一系列数字组成,每个数字表示其上方数字和左上方数字之和。
这个图形形如三角形,每个数字都代表这个位置在三角形的行和列。
如果我们想要用递归函数来打印杨辉三角形,该怎么做呢?其实很简单,只需要按照以下步骤:
1.定义递归函数:定义一个函数,它将接受两个参数,分别为要打印的行数和当前行数。
2.打印每一行数字:在递归函数中,我们需要打印当前行的数字。
这可以通过一个循环来实现,循环次数为当前行数。
3.计算下一行数字:在打印当前行数字之后,我们需要计算下一行数字。
这可以通过递归调用函数来实现,函数的参数为要打印的行数减一和当前行数加一。
4.打印分隔符:为了让数字更加清晰,我们可以在每个数字之间打印一个分隔符,比如空格或者逗号。
5.处理特殊情况:需要注意的是,杨辉三角形的第一行只有一个数字,因此需要特殊处理。
通过以上步骤,我们就可以用递归函数来打印杨辉三角形了。
这个过程可能有些复杂,但是只要按照步骤来,就可以轻松完成。
- 1 -。
编写程序,打印杨辉三角形。《C程序设计》

�律规的状形塔字金的绐所面前察观�了数格空出输地便方时行各出输环循在以可就
} ;)]j[b ,"d6-%"(ftnirp ;]j[a = ]j[b { /* 用所的行下备以中][b 到][a 行前当 ypoc */ )++j ;i =< j ;1 = j( rof ;]1-j[b + ]j[b = ]j[a )++j ;i =< j ;1 = j( rof { )++i ;N =< i ;1 = i( rof ;1=]1[b ;j ,i tni ;}0{ = ]08[b tni ;}0{ = ]08[a tni /* 数维 */ ;31 = N tni { )(niam diov >h.oidts< edulcni# :)改修加稍(吧下一析分来拿序程的家人把先 就那 , 了帖原到不找在现,码代其存保只时当 , 的做组数维一用兄仁位一了看上网在天两前 :组数维一 ________________________________________ 。果结的同相到得以可 ,)格空( ' ' 个 i*3-N*3 出输式格 c 以前行每在即 ;)' ' ,i * 3 - N * 3 ,"c*%"(ftnirp ;)" "(ftnirp )++j ;)i * 3 - 3 * N( < j ;0 = j( rof :成换
1 4 6 4 1 1 3 3 1 1 2 1 1 1 1 =============================================================================== �CV�果结行运 } ;0 nruter } ;)"n\"(ftnirp ;)]j[]i[a ,"d6-%"(ftnirp )++j ;i =< j ;0 = j( rof ;)" "(ftnirp )++j ;)i * 3 - 3 * N( < j ;0 = j( rof { )++i ;N < i ;0 = i( rof ;]j[]1-i[a + ]1-j[]1-i[a = ]j[]i[a )++j ;i < j ;1 = j( rof )++i ;N < i ;2 = i( rof } ;1 = ]i[]i[a ;1 = ]0[]i[a { )++i ;N < i ;0 = i( rof ;]N[]N[a tni ;j tni ;i tni { )(niam tni 31 N enifed# >h.oidts< edulcni# �了爽不就去上看 话的多再�行 31 出输能只多最度宽位 6 用数个 1�度宽示显幕屏于限�序程写编律规述上按 i×3�N×3 数格空 2 × 3�N × 3� 42 数格空 1 × 3�N × 3� 72 数格空 0 × 3�N × 3� 03 数格空 i = i 行N第 ...... 2 = i 行3第 1 = i 行2第 0 = i 行1第
递归函数打印杨辉三角形

递归函数打印杨辉三角形杨辉三角形是一个非常经典的数学问题,许多学生在初中时就学过它。
这个问题的目标是打印出一个三角形,其中每个数字都是它上面两个数字之和。
例如,一个四层的杨辉三角形如下所示:11 11 2 11 3 3 1要解决这个问题,我们可以使用递归函数。
递归函数是指函数可以调用自己的函数。
在这个问题中,我们可以使用一个递归函数来计算每一行的数字,并递归调用该函数来计算前面的行。
递归函数打印杨辉三角的步骤如下:1. 首先定义一个递归函数,该函数将接收一个整数n,表示要打印的杨辉三角形的层数。
2. 在函数中,我们首先打印出当前行的数字,并使用递归函数来打印前面的行。
3. 为了打印当前行的数字,我们需要使用一个循环来计算每个数字。
对于第一行和第一个数字,我们直接打印1。
对于其余的数字,我们可以使用递归函数来计算它们上面两个数字的和。
4. 最后,我们需要在每行的末尾打印一个换行符,以便下一行的数字能够正确地打印出来。
下面是递归函数打印杨辉三角的Python代码示例:def print_triangle(n):if n == 1:print(1)else:print_triangle(n-1)row = [1]for i in range(1, n-1):row.append(prev_row[i-1] + prev_row[i])row.append(1)print(' '.join(str(x) for x in row))print_triangle(4)输出结果:11 11 2 11 3 3 1通过递归函数,我们可以轻松地打印出杨辉三角形,而不需要使用循环和复杂的计算。
这个问题还可以扩展到其他方面,比如使用递归函数来计算杨辉三角形中任意一个数字的值。
JavaScript打印杨辉三角

JavaScript打印杨辉三⾓1、什么是杨辉三⾓?11 11 2 11 3 3 11 4 6 4 1上⾯就是⼀个简单的杨辉三⾓的例⼦观察⼀下,第n⾏有n个元素,第n⾏的第⼀个元素和第n个元素为1,其他元素,假设为第n⾏第m个元素,则其值为第n-1⾏第m-1个元素+第n-1⾏第m个元素。
2、附上代码<!DOCTYPE html><html><head><meta charset="utf-8"><title>杨辉三⾓</title><style type="text/css">div#container{width: 300px;margin: 0 auto;}</style></head><body><div id="container"><div><input type="text" placeholder="输⼊⾏数" id="input"/></div><div><br/><button id="post">打印杨辉三⾓</button></div></div><script type="text/javascript">var input = document.getElementById("input");var submit = document.getElementById("post");submit.onclick = function(){var inputvValue = input.value;var lineNumber = parseInt(inputvValue);if(!lineNumber){alert("您的输⼊是"+inputvValue+",有误,请重新输⼊!");}else{//新建数组,放置杨辉三⾓var array = new Array(lineNumber);for(var k=0;k<lineNumber;k++){array[k] = new Array();}var type = "";for(var i=0;i<lineNumber;i++){for(var j=0;j<=i;j++){//每⼀⾏⾸尾两个元素赋值为1if(0 == j || i == j){array[i][j] = 1;type+=array[i][j]+" ";}//其他元素为上⼀⾏前⼀列元素上⼀⾏这⼀列元素else {array[i][j] = array[i-1][j-1] + array[i-1][j];type+=array[i][j]+" ";}}type+="<br/>";}var container = document.getElementById("container");container.innerHTML+=type;}};</script></body></html>3、额外发现的问题上⾯代码的click事件只能被触发⼀次,想再次打印需要刷新,是因为使⽤innerHtml,使得html被重新加载,⾥⾯绑定的事件不见了。
python里递归法打印杨辉三角形

python里递归法打印杨辉三角形1. 引言1.1 概述在计算机科学中,杨辉三角形是一个经典的数学模型,被广泛应用于算法设计和问题求解。
它以数学家杨辉命名,最早出现在中国古代数学著作《详解九章算术》中。
杨辉三角形有着独特的性质和规律,被称为数学的奇迹。
本文将介绍在Python编程语言中使用递归法打印杨辉三角形的方法。
递归是一种重要的算法思想,它可以将一个问题拆解成更小规模的子问题进行求解,直到达到基本情况。
通过递归法,我们可以优雅地实现杨辉三角形的打印,充分展现递归思想的魅力和优势。
首先,我们将会详细介绍杨辉三角形的定义和性质,包括其规律和生成方式。
然后,我们会阐述递归法的基本原则和操作步骤,以及在Python 中如何利用递归法实现杨辉三角形的打印功能。
通过阅读本文,读者将深入了解杨辉三角形的概念以及递归法在问题求解中的应用。
同时,读者也将学会如何在Python编程环境中运用递归思想来实现杨辉三角形的打印。
这对于提升编程技巧和算法思维具有重要意义,是学习Python和算法的一步必经之路。
接下来,我们将开始具体介绍杨辉三角形的定义和性质。
1.2 文章结构本文按照以下结构组织:1. 引言1.1 概述1.2 文章结构1.3 目的2. 正文2.1 杨辉三角形的定义2.2 递归法实现杨辉三角形的打印3. 结论3.1 总结3.2 应用接下来将详细介绍每个部分的内容。
在引言部分,我们将对文章进行总体概述,并介绍文章的结构和目的。
首先,我们将简要介绍本文要讨论的主题——使用递归法打印杨辉三角形。
然后,我们将介绍本文的目的,即探讨如何使用递归法来实现杨辉三角形的打印,并了解递归在解决此类问题中的优势和应用。
在正文部分,我们将分两个小节来详细讨论杨辉三角形的定义和使用递归法实现其打印。
首先,我们将介绍杨辉三角形的定义,包括其特点和数学性质。
然后,我们将深入探讨如何使用递归方法来打印杨辉三角形。
我们将会解释递归算法的思路和原理,并给出相应的Python代码示例来实现递归打印杨辉三角形。
C语言实现打印杨辉三角的方法详细(三种方法)

C语⾔实现打印杨辉三⾓的⽅法详细(三种⽅法)⽬录题⽬描述问题分析1. 使⽤数组法(打印直⾓三⾓)2. 使⽤数组法(打印等腰三⾓)3. 使⽤公式法(打印等腰三⾓)⽹上参考题⽬描述打印杨辉三⾓(前N⾏)问题分析杨辉三⾓是中国古代数学的杰出研究成果之⼀,它把⼆项式系数图形化,把组合数内在的⼀些代数性质直观地从图形中体现出来,是⼀种离散型的数与形的结合。
杨辉三⾓的部分规律:1. 每个数等于它上⽅两数之和。
2. 每⾏数字左右对称,由1开始逐渐变⼤。
3. 第n⾏的数字有n项。
4. 第n⾏的m个数可表⽰为 C(n-1,m-1),即为从n-1个不同元素中取m-1个元素的组合数。
根据前三个规律,我们可以使⽤数组法获取杨辉三⾓;根据后两个规律,我们可以使⽤公式法求出每⾏每列的数字。
数组法思路:先根据设定的⾏数定义⼀个⼆维数组,然后使⽤⼀个双层循环,外层循环的因数为杨辉三⾓的⾏数,内层循环⽤来将杨辉三⾓每⾏的数字存⼊数组。
每⾏第⼀列和最后⼀列都是1,中间的数字等于它上⽅两数之和。
最后再通过两层循环将⼆维数组中的数字打印。
公式法思路:由于杨辉三⾓满⾜上⾯提到的第4点规律,所以我们可以直接定义⼀个函数求出杨辉三⾓第n⾏的m个数的值。
组合数公式根据上⾯这个组合的公式,我们可以使⽤阶乘及相关计算,求出杨辉三⾓形的每个数,同时打印出来。
1. 使⽤数组法(打印直⾓三⾓)打印直⾓形式的杨辉三⾓形,即打印⼆维数组时不加空格代码#include <stdio.h>#define LINE_MAXIMUM 10 //⾏数int main(){int i = 0, j = 0;int array[LINE_MAXIMUM][LINE_MAXIMUM] = {0};/* 填充⼆维数组 */for(i = 0; i < LINE_MAXIMUM; i++) //⾏数{for(j = 0; j <= i; j++) //每⾏的列数(第n⾏的数字有n项){if(j == 0 || j == i) //每⾏第⼀列和最后⼀列为1array[i][j] = 1;else //每个数等于它上⽅两数之和array[i][j] = array[i - 1][j - 1]\+ array[i - 1][j];}}/* 打印杨辉三⾓(直⾓) */for(i = 0; i < LINE_MAXIMUM; i++){for(j = 0; j <= i; j++)printf("%d ", array[i][j]);printf("\n");}return 0;}运⾏结果2. 使⽤数组法(打印等腰三⾓)打印等腰形式的杨辉三⾓形,需要在每⾏前⾯加若⼲空格,空格的宽度需要根据数字的宽度调整,使三⾓形对称。
Java源代码打印输出杨辉三角

提示:杨辉三角是由一个由数字排列的三角形数字表,特征两侧数字为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();}}}。
数据结构 耿国华 西北大学 3-6队列的应用举例

printf(“A”); if(kbhit()) {
ch1= getch( ); /* 读取键入的字符,但屏幕上不显示 */
4
西北大学 《数据结构》
if(ch1==’;’||ch1==’.’) break; /* 第一个进程正常中断 */
f= EnterQueue (&Q, ch1);
}
}
【算法 3.25 键盘输入循环缓冲区算法】
5
#include “stdio.h” #include “conio.h” #include “queue.h” main() {/*模拟键盘输入循环缓冲区*/
char ch1, ch2; SeqQueue Q; int f; InitQueue (&Q); /* 队列初始化 */ for(;;) {
element[rear]=1; rear=(rear +1 )% MAXSIZE; ⑵ 循环做以下操作,产生第 7 行的中间 5 个元素并入队。
例题
第三章 限定性线性表——栈和队列
-1-
西北大学 《数据结构》
element[rear]=element[front]+element[(front+1) %MAXSIZE]; rear=(rear +1 )% MAXSIZE; front=(front+1)%MAXSIZE; ⑶ 第 6 行的最后一个元素 1 出队。 front=(front+1)%MAXSIZE; ⑷ 第 7 行的最后一个元素 1 入队。
国家精品课程 西北大学《数据结构》
-1-
例题
3.6. 打 印 杨 辉 三 角
利用队列打印杨辉三角形。杨辉三角形的图案如图 3.16 所示。
python打印杨辉三角简单方法

Python打印杨辉三角简单方法1. 介绍杨辉三角,又称帕斯卡三角形,是数学中一个梯形状的数字阵列。
在杨辉三角中,每个数字是它上方两个数字的和。
它以排列成等腰三角形的方式排列数字。
在计算机编程中,我们可以使用Python语言来打印杨辉三角,下面将介绍一种简单的方法来实现。
2. 使用Python的循环和列表在Python中,我们可以利用循环和列表的特性来打印杨辉三角。
我们创建一个空列表来存储杨辉三角的数字。
我们使用循环来依次计算每一行的数字,并将其存储到列表中。
我们使用循环来打印出列表中的数字,从而得到杨辉三角的形状。
3. 代码示例下面是一个简单的Python代码示例,可以打印出指定行数的杨辉三角:```pythondef generate_pascals_triangle(n):triangle = []for i in range(n):row = [1] * (i + 1)for j in range(1, i):row[j] = triangle[i - 1][j - 1] + triangle[i - 1][j]triangle.append(row)return triangledef print_pascals_triangle(triangle):for row in triangle:print(" ".join(str(num) for num in row).center(len("".join(str(num) for num in triangle[-1]))))n = 10triangle = generate_pascals_triangle(n)print_pascals_triangle(triangle)```4. 代码解析在上面的代码示例中,我们首先定义了两个函数,一个用来生成杨辉三角的二维列表,另一个用来打印这个列表。
python基础练习题(题目打印出杨辉三角形前十行。)

python基 础 练 习 题 ( 题 目 打 印 出 杨 辉 三 角 形 前 十 行 。 ) day38
--------------------------------------------------------------实例061:杨辉三角 题目 打印出杨辉三角形前十行。 分析:查了一下,杨辉三角规律,每行多一个数,每行的值等于上一行相邻的值相加,其中边角值可以看为0,即一直为1,所以可以用列表套列表来 做 代码如下:
看看答案:
def generate(numRows): r = [[1]] for i in range(1,numRows): r.a43;y, [0]+r[-1],r[-1]+[0]))) return r[:numRows]
a=generate(10) for i in a:
print(i)
看了半天才看懂,是先生成两个列表,再由map调用lamba表达式把两个列表相加,得到下一行列表,点赞
for i in range(1,10): for k in range(10-i): print(" ", end="") print(b) c = b.copy() b.clear() for j in range(len(c)+1): if j==0 or j ==len(c): b.append(a[0]+c[0]) else: b.append(c[j]+c[j-1])
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
int i, j,s,t; for(i=1;i<=n;i++)
printf(" "); printf("1\n"); /*在中心位置输出杨辉三角最顶端的1*/ q=InitQueue(); /*设置容量为n+2的空队列*/ EnQueue(q,0); /*添加行分隔符,即0入队*/ EnQueue(q,1);EnQueue(q,1); /*第一行的值入队*/
设置 4 个数组 col [n] :col[i] 标识第 i 列是否安放 了皇后 md[2n-1] : md[k] 标识第 k 条主对角 线是否安放了皇后 sd[2n-1] : sd[k] 标识第 k 条次对角线 是否安放了皇后 q[n] : q[i] 记录第 i 行皇后在第几列
void Queen( int i ) { for ( int j = 0; j < n; j++ ) { if ( 第 i 行第 j 列没有攻击 ) { 在第 i 行第 j 列安放皇后; if ( i == n-1 ) 输出一个布局; else Queen ( i+1 ); 撤消第 i 行第 j 列的皇后; } }
} }
队列不空,则出队
❖递归与回溯
n皇后问题 在 n 行 n 列的国际象棋棋盘上,若两
个皇后位于同一行、同一列、同一对角 线上,则称为它们为互相攻击。n皇后 问题是指找到这 n 个皇后的互不攻击的 布局。
k = i+j
0123 0 1 2 3
k = n+i-j-1
0#次对角线 1#次对角线 2#次对角线 3#次对角线 4#次对角线 5#次对角线 6#次对角线
for(j=1;j<n;j++) /*利用循环队列输出前n-1行的值*/
{for(i=1;i<n-j;i++) /*在输出第j行的首元素之间输出n-j个空格*/
printf(" ");
EnQueue(q,0); /*行分隔符0入队*/
do
/*输出第j行并计算第j+1行*/
{s=DeQueue(q); /*删除队头元素并赋给s*/
如第四行为: 0 1 4 6 4 1 第五行为: 0 1 5 10 10 5 1
分析第 i 行元素与第 i+1行元素的关系如图所示 :
front
rear
在i=2时,队列的头指针指向0,尾指针指向1的下一位,我们看如何 由 第二行得到第三行的。①第三行的0入队②队头元素0出队并送入s中 ③取队头元素1并送入t中④s+t的值1入队。这时队列的队头指针指向 1,队尾指针指向第三行的第一个3的位置。重复②③④三步就得到 第三行;类推,我们由第三行又得到第四行;……
}
void Queen( int i ) {
for ( int j = 0; j < n; j++ ) {
if ( !col[j] && !md[n+i-j-1] && !sd[i+j] )
{
/*第 i 行第 j 列没有攻击 */
col[j] = md[n+i-j-1] = sd[i+j] = 1;
q[i] = j; /*在第 i 行第 j 列安放皇后*/
if ( i == n-1 ) { /*输出一个布局*/
for ( int k = 0; k < n; k++ )
cout << q[k] << ‘,’;
cout << endl;
}
else Queen ( i+1 ); col[j] = md[n+i-j-1] = sd[i+j] = 0; q[i] = 0; /*撤消第 i 行第 j 列的皇后*/ }
1#主对角线 3#主对角线 5#主对角线
0#主对角线 2#主对角线 4#主对角线
6#主对角线
解题思路
安放第 i 行皇后时,需要在列的方向从 0 到 n1 试探 ( j = 0, …, n-1 )
在第 j 列安放一个皇后: 如果在列、主对角线、次对角线方向有其它 皇后,则出现攻击,撤消在第 j 列安放的皇 后。 如果没有出现攻击,在第 j 列安放的皇后不 动,递归安放第 i+1行皇后。
打印杨辉三角形。
(a+b)n的系数
此问题是一个初等数学问题。系数表中的第i行有i+1个 数,除了第1个和最后一个数为1外,其余的数则为上一行中 位于其左、右的两数之和。
算法分析
如果要计算并输出二项系数表(即杨辉三角形)的前 n行的值,则所设循环队列的最大空间应为n+2。假设 队列中已存有第i行的值,为计算方便,在两行之间均 加一个“0”作为行间的分隔符,则在计算第i+1行之前, 头 指 针 正 指 向 第 i 行 的 “ 0” , 而 尾 元 素 为 第 i+1 行 的 “0”。由此,从左至右输出第i行的值,并将计算所得 的第i+1行的值插入队列。
t=GetHead(q); /*取队头元素给t*/
if(t) printf("%5 d",t);
/*若不到行分隔符0,则输出t,再输出一个空格*/
else printf("\n"); /*否则输出一个换行符*/
EnQueue(q,s+t); /*将第j+1行的对应元素s+t入队*/
}while(t!=0);
从第 2行数据计算并存放第 3 行数据
0
在运算的任一时刻,要产 生下一个入队的元素,均 是队头方向的两元素相 加后入队.
11
0 11
11
0 11
22
11
0 11
33
33
11
0 11
44
66
44
11
0 11
55
1100
1100
55
11
0
11
66
1155
2200
1155
66
11
杨辉三角形元素入队顺序
假设n=4,i=3,则输出第3行元素并求解第4行 元素值的循环执行过程中队列的变化状态如图所示 :
完整算法请看教材
上图的操作过程是:
1、出队并保存出队元素
2、取出front所指元素并保存
3、计算前两步得到的元素值之和并入队
重复这三步。(当由第i行求得第i+1行时,0先入队……)
void YangHui( int n )/*打印杨辉三角形的前n行*/ { SeqQueue *q;
}
输出杨辉三角形的最后一行()第n行
DeQueue(q);
/* 删除行分隔符 */
printf("%3d",DeQueue(q)); /* 输出第n行的第一个元素 */
while(!QueueEmpty(q))
/* 输出第n行的其余元素 */
{t=DeQueue(q);
printf(“%5 d",t);