【C语言】打印n行杨辉三角

一、使用二维数组实现

#include <stdio.h>

//释放堆区空间
void freespace(int* arr[], int size)
{
    
    
	if(arr == NULL)
		return;
	for(int i = 0; i < size; i++)
	{
    
    
		free(arr[i]);
		arr[i] = NULL;
	}
}
//杨辉三角
void yang(int*arr[], int rows)
{
    
    
	if(arr == NULL) return;
	for(int i = 0; i < rows; i++)
	{
    
    
		arr[i] = (int*)malloc(sizeof(int) * rows);
		if(arr[i] == NULL)
			return;
	}
	if(arr == NULL)
		return;
	
	for(int i = 0; i < rows; i++)
	{
    
    
		for(int j = 0; j <= i; j++)
		{
    
    
			if(j == 0 ||  i == j)
			{
    
    
				*(arr[i] + j) = 1;
			}
			else
			{
    
    
				*(arr[i] + j) = *(arr[i - 1] + j - 1) + *(arr[i - 1] + j);
			}
			printf("%4d", *(arr[i] + j));
		}
		printf("\n");
	}
}

int main()
{
    
    
	int* arr[10] = {
    
    0};
	yang(arr, 5);
	freespace(arr, 5);
}

结果:输出5行
在这里插入图片描述

二、使用一维数组实现输出n行的杨辉三角

思想:i控制行数,j是元素下标,从尾向前扫
在这里插入图片描述

#include <stdio.h>
#include <malloc.h>
int main()
{
    
    
	int rows;
	scanf("%d", &rows);
	int* arr = (int*)malloc(sizeof(int) * rows);
	if(arr == NULL)
		return;
	arr[0] = 1;
	for(int i = 0; i < rows; i++)
	{
    
    
		for(int j = i; j >= 0; j--)
		{
    
    
			if(j == 0 || i == j)
			{
    
    
				arr[j] = 1;
			}
			else
			{
    
    
				arr[j] = arr[j ]+ arr[j - 1];
			}
			printf("%4d", arr[j]);
		}
		printf("\n");
	}
	free(arr);
	arr = NULL;
}

结果:输出5行
在这里插入图片描述

三、不使用数组打印杨辉三角

在这里插入图片描述

思路: i控制行 j 控制下标
**规律:**除了j == 0 和 i == j情况下,其余每一个数的对应的i > j,并且当前位置的数满足下面式子
val = val * (i - j + 1) / j ;

代码如下:

#include <stdio.h>

int main()
{
    
    
	int rows = 5;
	int val = 1;
	for(int i = 0; i < rows; i++)
	{
    
    
		for(int j = 0; j <= i; j++)
		{
    
    
			if(j == 0 || i == j)
			{
    
    
				val = 1;
			}
			else
			{
    
    
				val = val * (i - j + 1) / j; 
			}
			printf("%4d", val);
		}
		printf("\n");
	}
	
}

结果:
在这里插入图片描述

おすすめ

転載: blog.csdn.net/xiaoxiaoguailou/article/details/120904920