目录
1.二维数组
?2.一维数组
? ? ? ? 2.1两个一维数组
? ? ? ? ?2.2 一个一维数组
3.不用数组
用到的头文件:
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
1.二维数组
每一行的第一个值和最后一个值为1,其他的数据值==arr[上一行][同一列]+arr[上一行][上一列]
void YangHui2(const int n)//const定义的为常变量
{
//指针数组 弄一个竖的数组,里边全是指针,每一个空间的指针去开辟一个malloc空间
int** arr = (int**)malloc(n * sizeof(int*));//竖的数组申请好了
assert(*arr != NULL); //断言
for (int i = 0; i < n; i++) //每一个格子里的指针都malloc
{
arr[i] = (int*)malloc(n * sizeof(int));
} //二维数组申请好了
for (int i = 0; i < n; i++)//行号 //开始赋值
{
for (int j = 0; j <= i; j++)//列号
{
if (j == 0 || i == j)//每一行第一个数和最后一个数都为1
{
arr[i][j] = 1;
}
else
{
arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];//其他的数据值==arr[上一行][同一列]+arr[上一行][上一列]
}
}
}
for (int i = 0; i < n; i++) //打印
{
for (int j = 0; j <= i; j++)
{
printf("%-5d", arr[i][j]);
}
printf("\n");
}
for (int i = 0; i < n; i++) //用了动态内存要释放
{
free(arr[i]);
}
free(arr);
}
?2.一维数组
? ? ? ? 2.1两个一维数组
void YangHui1(const int n)
{
int* arr = (int*)malloc(n * sizeof(int));//定义两个一维数组
int* brr = (int*)malloc(n * sizeof(int));
assert(arr != NULL);
assert(brr != NULL);
for (int i = 0; i < n; i++)//将arr和brr全部赋值为1
{
arr[i] = brr[i] = 1;
}
for (int i = 0; i < n; i++)//处理第i行数据
{
for (int j = 1; j < i; j++)//从下标为1的值开始处理 从第三行开始处理,不处理第一个和最后一个数
{
brr[j] = arr[j] + arr[j - 1];
}
for (int k = 0; k <= i; k++)//打印和 将brr数据向arr覆盖
{
printf("%-5d", brr[k]);
arr[k] = brr[k];
}
printf("\n");
}
free(arr); //释放
free(brr);
}
? ? ? ? ?2.2 一个一维数组
void YangHui1_2(const int n)
{
int* arr = (int*)calloc(n, sizeof(int));
arr[0] = 1; //第一个数据赋值为1,其他赋值为0
assert(arr != NULL);
for (int i = 0; i < n; i++)//处理第i行数据
{
for (int j = i; j >= 1; j--)//从后往前推
{
arr[j] = arr[j] + arr[j - 1];//等于当前位置的值+上一个位置的值
}
for (int k = 0; k <= i; k++) //打印
{
printf("%-5d", arr[k]);
}
printf("\n");
}
free(arr);
}
3.不用数组
第n行:第一个值是1,第二个值1*(n-1)/1,第三个值1*(n-1)*(n-2)/2 第四个数为1×(n-1)×(n-2)/2×(n-3)/3…依此类推
void YangHui0(const int n)
{
int tmp = 0;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= i; j++)
{
if (j == 1)//第一个值为1,其他的用公式
{
tmp = 1;
}
else//公式第n行:第一个值是1,第二个值1*(n-1)/1,第三个值1*(n-1)*(n-2)/2,第四个数为1×(n-1)×(n-2)/2×(n-3)/3…依此类推
{
tmp = tmp * (i - (j - 1)) / (j - 1);//1 3 3 1
}
printf("%-5d", tmp);
}
printf("\n");
}
}
?运行的结果都为:
|