首页 > 其他分享 >谭浩强 第5版 第6章 第6题

谭浩强 第5版 第6章 第6题

时间:2024-01-28 19:32:14浏览次数:16  
标签:int 斜线 行第 谭浩强 数组 杨辉三角 ROW

题目:

输出以下的杨慧三角(要求输出10行)

1
1  1
1  2  1
1  3  3  1
1  4  6  4  1
.  .  .  .  .
.  .  .  .  .  
.  .  .  .  .  
分析:

通过观察,我们可以发现题目中的“杨辉三角形”的规律:

  1. 第n行,有n个数
  2. 每个数等于“上一行同样位置的数” + “上一行左边的数”,如第n行第m项 == 第n-1行第m项 + 第n-1行第m-1项,如,

                             1

                             1  1

                             1  2  1  -------- 2 = 1 + 1

                             1  3  3  1

                             1  4  6  4  1 --- 6 == 3 + 3

其实“杨辉三角形”的规律还有很多,如:斜线上数字的和等于其向左(从左上方到右下方的斜线)或向右拐弯(从右上方到左下方的斜线)拐角上的数字,等等。但以上2点足以解题,所以在这里就不深入探究“杨辉三角形”了


知道了以上2点,我们可以很容易地写出1个2维数组 + 2个for循环的代码(一个控制行,一个控制列).

但有2点需要注意:

  1. 每个数都是由上一行的数计算而来的,那第1行怎么办?
  2. 每个数都是由这一列及上一列的数计算而来的,那第一列怎么办?

为了解决这个问题,我们只需要让数组的行、列各扩大1个单位,就可以防止数组越界。


代码实现:
#include <stdio.h>

#define ROW 10//定义行数

int main()
{
	int i = 0;
	int j = 0;
	//为防止越界,行、列均 + 1
	int arr[ROW + 1][ROW + 1] = {1};
	
	for (i = 1; i < ROW + 1; i++)
	{
		for (j = 1; j <= i; j++)
		{
			arr[i][j] = (arr[i - 1][j] + arr[i - 1][j - 1]);
			printf("%-3d ", arr[i][j]);
		}
		printf("\n");
	}
	return 0;
}
运行结果:

谭浩强 第5版 第6章 第6题 _杨辉三角形

标签:int,斜线,行第,谭浩强,数组,杨辉三角,ROW
From: https://blog.51cto.com/u_16509575/9453808

相关文章

  • 谭浩强 第5版 第6章 第4题
    题目: 有一个已经排好序的数组,要求输入一个数后,按原来顺序的规律将它插入数组中。分析:我们可以利用2步来解这道题,找到待插入的位置插入代码实现:#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>intmain(){ intarr[10]={1,2,3,4,5,6,7,8,9}; intinput=0; int......
  • 谭浩强 第5版 第5章 第17题
    题目:两个乒乓球队进行比赛,各出三人。甲队为A,B,C3人,乙队为X,Y,Z3人。已抽签决定比赛名单。有人向队员打听比赛的名单,A说他不和X比,C说他不和X,Z比,请编程序找出3对赛车的名单。分析:通过分析题目,我们可以很直观地想到:利用3个for循环,遍历一遍。直到满足限制条件时跳出来即可。题目中有2......
  • 谭浩强 第5版 第5章 第11题
    问:一个球从100m高度自由落下,每次落地后反弹回原高度的一半,再落下,再反弹。求它在第10次落地时共经过多少米,第10次反弹多高。分析:这道题的代码实现起来非常简单,我们只需要注意一点——把题目读清楚。题目中求的是第10次落地时,经过多少m,而不包括第10次回弹的距离。清楚了这一点后,我们......
  • 谭浩强 第5版 第4章 第10题
    企业发放的奖金根据利润提成。(利润用“x”代替)x≤100000元的,奖金可提成10%100000<x≤200000元部分,按7.5%提成200000<x≤400000元部分,按5%提成400000<x≤600000元部分,按3%提成600000<x≤1000000元部分,按1.5%提成1000000<x部分,按1%提成。要求:从键盘输入当月利润x,输......
  • 谭浩强 第5版 第5章 第10题
    题目有一个分数序列:求出这个数列的前20项之和。分析通过研究这组数列,我们可以看出来:除第一项外,后续每一项的分母都是前一项的分子,分子都是前一项的分母与分子之和。分析完之后,这道题就很简单了。代码实现:#include<stdio.h>intmain(){ doubletop=0.0;//分母 doubledow=......
  • 谭浩强第5版 第4章 第9题
    #define_CRT_SECURE_NO_WARNINGS1////输入一个数//1.求出它是几位数//2.分别输出它的每一位//3.逆序输出它//如,//输入:123//输出:3位123321//#include<stdio.h>#include<math.h>intNum_word(inta){ //1个数最少有1位,所以i定义为1 inti=1; while......
  • C语言程序设计-谭浩强(第五版)
    第1章程序设计和C语言1.1什么是计算机程序1.2什么是计算机语言1.3C语言的发展及其特点1.4最简单的C语言程序1.4.1最简单的C语言程序举例1.4.2C语言程序的结构1.5运行C程序的步骤与方法1.6程序设计的任务第2章算法——程序的灵魂2.1程序=算法+数据结构2.2什么是算法......
  • C语言程序设计(第四版)谭浩强版 课后答案 第八章 指针
    1、输出3个整数,按由小到大的顺序输出,写的复杂了,加上分析会变得简单,像下面输出3个字符(从小到大)#include<stdio.h>intmain(){voidcompare(int*a,int*b,int*c);inta,b,c;printf("pleaseinputthreenumbers:");scanf("%d%d%d",&a,&b,&c);c......
  • C语言程序设计(第四版)谭浩强版 课后答案 第五章
    2、#include<stdio.h>#include<math.h>intmain(){intsign=1,count=0;doublepi=0.0,n=1.0,term=1.0;while(fabs(term)>=pow(10,-6)){pi=pi+term;n=n+2;si......
  • C语言程序设计(第四版)谭浩强版 课后答案 第四章
    4、#include<stdio.h>intmain(){inta,b,c;scanf("%d%d%d",&a,&b,&c);if(a>b){if(a>c){printf("maxnumis:%d\n",a);}......