算法设计与分析:第二章 递归 2.5斜数组之找规律

本文探讨了如何通过分析原始矩阵的行列下标与现有下标之间的关系来找到特定的排列规律,并用C语言实现了一个函数来展示这些排列。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*
找出如下图的规律:

关键:
找规律的题目,分析原始行列下标与现有下标之间的关系
第一行				第二行			第三行			第四行
斜行 原始			斜行   原始		斜行   原始		斜行   原始
[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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值