其实这两道题蛮类似的,都是利用二维数组+循环即可。
杨辉三角:
编写一个程序,输入一个正整数 n(不超过 15),输出 n 行的金字塔型杨辉三角形。
#include<iostream>
using namespace std;
int a[20][20];
int main()
{
int n;
cin >> n;
for (int i = 1; i <= n; ++i)
a[i][1] = 1;
for (int i = 1; i <= n; ++i)
{
for (int j = 2; j <= i; ++j)
{
a[i][j] = a[i - 1][j] + a[i - 1][j - 1];
}
}
for (int i = 1; i <= n; ++i)
{
for (int j = 0; j != n - i; ++j)
cout << " ";
for (int k = 1; k <= i; ++k)
cout << a[i][k] << " ";
cout << endl;
}
system("pause");
}
魔方阵:
采用如下规则产生魔方阵:
每次往左上角走一步。
由1开始填数,将1放在第0行的中间位置
- 左上角超出上方边界,则在最下边相对应的位置填入下一个数字;
- 左上角超出左边边界,则在最右边相对应的位置填入下一个数字;
- 如果按上述方法找的的位置已经填入数据,则在同一列下一行填入下一个数字。
#include<iostream>
#include<iomanip>
using namespace std;
int a[11][11];
int main()
{
int n;
cin >> n;
int row = 0;
int col = n / 2;
a[row][col] = 1;
for (int i = 2; i <= n * n; ++i)
{
if ((row > 0 && row < n - 1) && col > 0 && a[row - 1][col - 1] > 0 && a[row - 1][col - 1] < i)
{
a[row + 1][col] = i;
row = row + 1;
}
else if (row == 0 && col > 0)
{
a[n - 1][col - 1] = i;
row = n - 1;
col = col - 1;
}
else if (col == 0 && row > 0)
{
a[row - 1][n - 1] = i;
row = row - 1;
col = n - 1;
}
else if (row == 0 && col == 0)
{
a[1][0] = i;
row = 1;
}
else
{
a[row - 1][col - 1] = i;
row = row - 1;
col = col - 1;
}
}
for (int i = 0; i != n; ++i)
{
for (int j = 0; j != n; ++j)
cout << setw(5) << a[i][j];
cout << endl;
}
system("pause");
}