`
xitong
  • 浏览: 6401823 次
文章分类
社区版块
存档分类
最新评论

方阵旋转--蓝桥杯

 
阅读更多

简述

这是2012年蓝桥杯全国软件大赛预赛(C++本科组)第5题,问题是矩阵的旋转。

推荐链接:《2012蓝桥杯软件大赛预赛题目汇总》

题目描述

对一个方阵转置,就是把原来的行号变列号,原来的列号变行号

例如,如下的方阵:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

转置后变为:
1 5 9 13
2 6 10 14
3 7 11 15
4 8 12 16

但,如果是对该方阵顺时针旋转(不是转置),却是如下结果:
13 9 5 1
14 10 6 2
15 11 7 3
16 12 8 4

下面的代码实现的功能就是要把一个方阵顺时针旋转。

void rotate(int* x, int rank)
{
	int* y = (int*)malloc(___________________);  // 填空

	for(int i=0; i<rank * rank; i++)
	{
		y[_________________________] = x[i];  // 填空
	}

	for(i=0; i<rank*rank; i++)
	{
		x[i] = y[i];
	}

	free(y);
}

int main(int argc, char* argv[])
{
	int x[4][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
	int rank = 4;

	rotate(&x[0][0], rank);

	for(int i=0; i<rank; i++)
	{
		for(int j=0; j<rank; j++)
		{
			printf("%4d", x[i][j]);
		}
		printf("\n");
	}

	return 0;
}

请分析代码逻辑,并推测划线处的代码。
答案写在 “解答.txt” 文件中
注意:只写划线处应该填的内容,划线前后的内容不要抄写。

分析

该题的重点就在矩阵元素位置的改变。第一空填入需要分配的内存空间,较简单;第二空填的是元素新位置和旧位置的函数关系式,实际是个数学问题。

源代码

# include <stdio.h>
# include <stdlib.h>
void rotate(int* x, int rank)
{
	int* y = (int*)malloc(sizeof(int) * rank * rank);  // 填空

	int i;
	for(int i=0; i<rank * rank; i++)
	{
		y[(i % 4) * 4 + 3 - (i / 4)] = x[i];  // 填空
	}

	for(i=0; i<rank*rank; i++)
	{
		x[i] = y[i];
	}

	free(y);
}

int main(int argc, char* argv[])
{
	int x[4][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
	int rank = 4;

	rotate(&x[0][0], rank);

	for(int i=0; i<rank; i++)
	{
		for(int j=0; j<rank; j++)
		{
			printf("%4d", x[i][j]);
		}
		printf("\n");
	}

	return 0;
}

最后答案

sizeof(int) * rank * rank
(i % 4) * 4 + 3 - (i / 4)
分享到:
评论

相关推荐

    晶体硅光伏(PV)方阵I-V特性的现场测量.pdf

    晶体硅光伏(PV)方阵I-V特性的现场测量

    数字方阵--汇编语言课程设计报告

    《数字方阵--汇编语言课程设计报告》深入解析 在计算机科学领域,汇编语言是一种低级编程语言,它与机器语言紧密相关,但比机器语言更易读、更便于编写。本报告将详细探讨如何使用汇编语言实现一个数字方阵的显示...

    蓝桥杯c++-蓝桥杯竞赛练习之算法提高题矩阵乘方.zip

    对于一个给定的方阵A,它的n次方表示为A^n,其中n是正整数。计算大指数的矩阵乘方可以是一项挑战,因为它涉及到大量的矩阵乘法操作,而矩阵乘法的时间复杂度通常是O(n^3)。 在C++中,我们可以使用动态规划或者高斯-...

    2020华为春招–N阶方阵旋转(python)

    10),输出此方阵顺时针旋转M(0&lt;=M&lt;=10000)次后的方阵 题目示例:三阶方阵,围绕方阵中心顺时针旋转 输入描述: (1) 第一行输入一个正整数N (0&lt;N&lt;10) (2) 接下来输入方阵的数据,输入N行,每行N个整数用...

    蓝桥杯-C语言图形输出

    "蓝桥杯-C语言图形输出" 本资源摘要信息涵盖了 C 语言图形输出的多方面知识点,包括矩形、平行四边形、等腰三角形、等腰梯形、空心梯形、空心正六边形、sin(x) 函数图形、cos(x) 函数图形、螺旋方阵、数字金字塔、...

    数字旋转方阵(java)

    在本实验中,任务是创建一个Java程序,用于输出顺时针旋转的数字方阵。这个方阵的特性是从中心开始,数字按照顺时针方向填充。给定的代码片段是用C++编写的,但我们可以将其转换为Java语言,并解释其工作原理。 ...

    算法-素数方阵(信息学奥赛一本通-T1446).rar

    《算法-素数方阵(信息学奥赛一本通-T1446)》这个压缩包文件中的核心主题是素数方阵,这是在信息学奥林匹克竞赛中常见的一种算法问题。素数,作为数学的基本元素,是所有正整数的基础,而素数方阵则是将素数排列成...

    C语言写的旋转方阵问题

    用C语言写的旋转方阵,我的旋转方阵是逆时针的,用递归写的

    数字旋转方阵(顺时针).pptx

    数字旋转方正实现,方阵旋转问题分析演示,C++代码实现;

    转方阵 矩阵旋转

    把输入 的 数字方阵顺时针旋转 90° 。

    方阵Linq-Traverse Healthcare的业务发展迷宫

    方阵Linq-Traverse Healthcare的业务发展迷宫深入探讨了如何在医疗保健领域采用智能方法推动业务增长。在这个数字化时代,技术对医疗行业的影响力日益增强,Python、cloud、Apache、Azure以及Ajax等技术成为了关键的...

    数字旋转方阵 分治法——C++代码

    课程的随堂作业,C语言的,用dev就能运行,萌新代码,勿喷,仅仅帮助不想写作业的朋友方便一下,反正老师也不会仔细检查的

    算法-单词方阵(洛谷-P1101)(包含源程序).rar

    【标题】:“算法-单词方阵(洛谷-P1101)(包含源程序).rar” 这个压缩包文件的标题暗示了它包含了与算法相关的资料,具体是关于一个名为“单词方阵”的问题,这个问题来源于知名的在线编程平台洛谷(LeetCode的...

    2018 第九届 蓝桥杯大赛个人赛决赛-A组赛题 C++

    【2018第九届蓝桥杯大赛个人赛决赛-A组赛题 C++】是针对C++编程语言的一场竞赛,旨在检验参赛者的算法设计、数据结构理解和编程能力。赛题涵盖了一系列挑战性的编程问题,其中包括了基础数学、逻辑推理以及计算机...

    阿勒夫-钢铁方阵-军表1

    ALEPH阿勒夫Steel Phalanx钢铁方阵钢铁方阵单位档案ISC:追随战士ISC: Myrmidons老兵部队移动力MOV近战CC射击BS体格PH意志W

    方阵顺时针旋转的实现代码

    方阵顺时针旋转是一种常见的矩阵操作,常用于图像处理、数据转换等领域。在这个问题中,我们关注的是如何使用C++编程语言实现一个函数来完成这个任务。给出的代码示例提供了一个解决方案。 首先,我们需要理解...

    Anti-diagonal matrix traversal:此功能允许您沿反对角线遍历方阵。-matlab开发

    此函数将方阵作为输入并返回两个输出。 第一个是一个向量,包含从 (1,1) 条目开始并沿反对角元素前进的矩阵值。 第二个输出给出沿反对角线的元素的总和。 例如: a = [1 2 3; 4 5 6; 7 8 9]; [b,c] = diagtrav(a); ...

Global site tag (gtag.js) - Google Analytics