原题:设已知有一个 n*n 的上三角矩阵 A 的上三角元素已按行主序连续存放在数组 B 中. 设计一个算法将 B 中元素按列主序连续存放至数组 C 中.
例:设 n = 3;
|1 2 4|
A= |0 3 5| B=(1,2,4,3,5,6), C=(1,2,3,4,5,6).
|0 0 6|,
分析:对于 A 中元素 a[i][j] 易知在 C 中的存储位置为 j*(j+1)/2 + i, 我们可按行主序进行循环,对于 i, j 坐标,设在 B 中的下标为 k, 这样可求行 C 的值.
#include<iostream>
#include<time.h>
#include<iomanip>
#define N 5
using namespace std;
#define ElemType int
int CreateArray(ElemType a[N][N], ElemType b[N*N])
{//生成一个数据元素随机生成的二维数组
int i, j, n = 0;
srand((unsigned)time(NULL));
for(i=0;i<N;i++)
{
for(j=i;j<N;j++)
{
a[i][j]=rand()%99 + 6;
b[n++]=a[i][j];//将二维数组 a 中元素按行主序存到数组 b 中
}
}