打印方阵1
题目:
编写一个算法,给定一个一维数组,任意输入6个整数,如5 7 4 8 9 1,然后建立一个具有以下内容的方阵,并打印出来
5 7 4 8 9 1
1 5 7 4 8 9
9 1 5 7 4 8
8 9 1 5 7 4
4 8 9 1 5 7
7 4 8 9 1 5
读者先想想,我的分析在很下面
分析:
初看这个方阵会觉得又简单又复杂,规律很容易发现,每次换行时,屁股跑到头上去。
但如何最简单的打印出来呢?难道必须每次换行时,整个数组从新排列吗?只要看到我下面的图形,你会马上找到最佳答案:
5 7 4 8 9 1 5 7 4 8 9 1
5 7 4 8 9 1 5 7 4 8 9 1
5 7 4 8 9 1 5 7 4 8 9 1
5 7 4 8 9 1 5 7 4 8 9 1
5 7 4 8 9 1 5 7 4 8 9 1
5 7 4 8 9 1 5 7 4 8 9 1
红色字就是需要打印的内容,因此最快速的方法就是申请一个2倍大小的数组。
算法:
比较简单,就用C++了
void Print(int * arr)
{
int * newArr = new int[12];
int i = 0;
for(ii = 0;i<6;i++)
{
newArr[i] = arr[i];
}
for(i = 6;i<12;i++)
{
newArr[i] = arr[i-6];
}
i = 6;//其实打印位置在第6个,直到其实位置变为0,则打印完毕
while(i>0)
{
for(int j = i;j<i+6;j++)
{
cout<<newArr[j]<<"\t";
}
cout<<endl;
i--;
}
}