设为首页 加入收藏

TOP

C翻转(一)
2014-11-23 23:20:56 来源: 作者: 【 】 浏览:2
Tags:翻转
前言
北邮的上机题我见一道就必须ac一道,当年被刷的场景和心情一直是这一年多我拼的动力之一,挺好!
题目描述:
首先输入一个5 * 5的数组,然后输入一行,这一行有四个数,前两个代表操作类型,后两个数x y代表需操作数据为以x y为左上角的那几个数据。
操作类型有四种:
1 2 表示:90度,顺时针,翻转4个数
1 3 表示:90度,顺时针,翻转9个数
2 2 表示:90度,逆时针,翻转4个数
2 3 表示:90度,逆时针,翻转9个数
输入:
输入有多组数据。
每组输入一个5 * 5的数组,然后输入一行,这一行有四个数,前两个代表操作类型,后两个数x y代表需操作数据为以x y为左上角的那几个数据。
输出:
输出翻转后的数组。
样例输入:
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
1 3 1 1
样例输出:
11 6 1 4 5
12 7 2 9 10
13 8 3 14 15
16 17 18 19 20
21 22 23 24 25
考察重点
主要是考察矩阵的翻转,可以参考我之前的一篇博客:http://blog.csdn.net/zinss26914/article/details/8514920
AC代码
[cpp]
#include
#include
void turn904(int (*a)[5], int (*b)[5], int row, int column, int type);
void turn909(int (*a)[5], int (*b)[5], int row, int column, int type);
int main()
{
int i, j, t1, t2, row, column;
int a[5][5], b[5][5];
while(scanf("%d", &a[0][0]) != EOF)
{
//接收矩阵
for(i = 0; i < 5; i ++)
{
for(j = 0; j < 5; j ++)
{
if(i == 0 && j == 0)
{
continue;
}else
{
scanf("%d", &a[i][j]);
}
}
}
//接收旋转参数
scanf("%d%d%d%d", &t1, &t2, &row, &column);
row -= 1;
column -= 1;
//矩阵旋转
if(t1 == 1 && t2 == 2)
{
//90度4个数
turn904(a, b, row, column, 0);
}else if(t1 == 1 && t2 == 3)
{
//90度9个数
turn909(a, b, row, column, 0);
}else if(t1 == 2 && t2 == 2)
{
//逆90度4个数
turn904(a, b, row, column, 1);
}else if(t1 == 2 && t2 == 3)
{
//逆90度9个数
turn909(a, b, row, column, 1);
}
//打印输出
for(i = 0; i < 5; i ++)
{
for(j = 0; j < 5; j ++)
{
if(j == 4)
{
printf("%d\n", b[i][j]);
}else
{
printf("%d ", b[i][j]);
}
}
}
}
return 0;
}
void turn904(int (*a)[5], int (*b)[5], int row, int column, int type)
{
int i, j;
for(i = 0; i < 5; i ++)
{
for(j = 0; j < 5; j ++)
{
if((i == row || i == row + 1) && (j == column || j == column + 1))
{
switch(type)
{
case 0:
//顺时针
b[i][j] = a[2 - 1 - j][i];
break;
case 1:
//逆时针
b[i][j] = a[j][2 - 1 - i];
break;
}
}else
{
b[i][j] = a[i][j];
}
}
}
}
void turn909(int (*a)[5], int (*b)[5], int row, int column, int type)
{
int i, j;
for(i = 0; i < 5; i ++)
{
for(j = 0; j < 5; j ++)
{
if((i == row || i == row + 1 || i == row + 2) && (j == column || j == column + 1 || j == column + 2))
{
switch(type)
{
case 0:
//顺时针
b[i][j] = a[3 - 1 - j][i];
break;
case 1:
//逆时针
b[i][j] = a[j][3 - 1 - i];
break;
}
}else
{
b[i][j] = a[i][j];
}
}
}
}
/*************************
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇大数运算算法详解 下一篇括号配对问题 栈实现

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: