/*
找出如下图的规律:
关键:
找规律的题目,分析原始行列下标与现有下标之间的关系
第一行 第二行 第三行 第四行
斜行 原始 斜行 原始 斜行 原始 斜行 原始
[1,1]-[1,1] [2,1]-[2,1] [3,1]-[3,1] [4,1]-[4,1]
[1,2]-[2,2] [2,2]-[3,2] [3,2]-[4,2]
[1,3]-[3,3] [2,3]-[4,3]
[1,4]-[4,4]
找规律
斜行 原始
[i,j]-[i-1+j,j]
斜行i取值(1~n)
列j取值(1~n+1-i)
因为斜行最大值为:n = i - 1 + j,j = n - i + 1,i又取值[1~n]
输入:
4
5
输出:
1
5 2
8 6 3
10 9 7 4
1
6 2
10 7 3
13 11 8 4
15 14 12 9 5
*/
/*
关键:
1 找规律
斜行 原始
[i,j]-[i-1+j,j]
斜行i取值(1~n)
列j取值(1~n+1-i)
因为斜行最大值为:n = i - 1 + j,j = n - i + 1,i又取值[1~n]
2 iArr[i - 1 + j][j] = iCnt++;//表示出斜行,即根据原始矩阵确定新的矩阵的存储位置
*/
#include <stdio.h>
const int MAXSIZE = 100;
void printGraph(int n)
{
int iCnt = 1;
int iArr[MAXSIZE][MAXSIZE];
for(int i = 1 ; i <= n ; i++)
{
for(int j = 1 ; j <= n - i + 1 ; j++)
{
iArr[i - 1 + j][j] = iCnt++;//表示出斜行
}
}
for(int i = 1 ; i <= n ; i++)
{
for(int j = 1 ; j <= i ; j++)
{
printf("%d ",iArr[i][j]);
}
printf("\n");
}
}
void process()
{
int n;
while(EOF != scanf("%d",&n))
{
printGraph(n);
printf("\n");
}
}
int main(int argc,char* argv[])
{
process();
getchar();
return 0;
}
算法设计与分析:第二章 递归 2.5斜数组之找规律
最新推荐文章于 2023-08-02 21:30:00 发布