#include "stdafx.h"
#include <cstdio>
#include <cstdlib>
#include <windows.h>
#include <iostream>
using namespace std;
//获取一片内存中的值【当作二维数组执行】
int GetValue(int * arr, int nSize, int nRow, int nColumn)
{
if (nRow >= nSize || nColumn >= nSize)
{
return 0;
}
return *(arr + nRow*nSize + nColumn);
}
//设置内存中的值【当作二维数组执行】
void SetValue(int *arr, int nSize, int nRow, int nColumn, int value)
{
if (nRow >= nSize || nColumn >= nSize)
{
return;
}
*(arr + nRow*nSize + nColumn) = value;
}
//生成动态杨辉三角
void DTYH(int nLevel)
{
int *arr = new int[(nLevel)*(nLevel)];
memset(arr, 0, sizeof(int) * nLevel * nLevel);
for (int i = 0; i < nLevel; i++)
{
SetValue(arr, nLevel, i, 0, 1);
SetValue(arr, nLevel, i, i, 1);
}
for (int i = 2; i < nLevel; i++)
{
for (int j = 1; j < i; j++)
{
SetValue(arr, nLevel, i, j, GetValue(arr, nLevel, i - 1, j - 1) + GetValue(arr, nLevel, i - 1, j));
}
}
for (int i = 0; i < nLevel; i++)
{
if (i % 2)
{
cout << " ";
}
for (int j = 0; j < (nLevel - i) / 2; j++)
{
if (nLevel % 2 & j == 0 & i % 2)
{
continue;
}
else
{
cout << " ";
}
}
for (int j = 0; j <= i; j++)
{
printf("%-8d", GetValue(arr, nLevel, i, j));
}
cout << endl;
}
delete[]arr;
}
int main()
{
int a;
while (scanf_s("%d", &a), a)
{
DTYH(a);
}
return 0;
}
创建动态数组--杨辉三角
最新推荐文章于 2022-03-03 21:53:09 发布