现在的位置: 首页 > 综合 > 正文

九度OJ 题目1171:C翻转

2013年07月03日 ⁄ 综合 ⁄ 共 1660字 ⁄ 字号 评论关闭
/*********************************
*   日期:2013-2-11
*   作者:SJF0115
*   题号: 九度OJ 题目1171:C翻转
*   来源:http://ac.jobdu.com/problem.php?pid=1171
*   结果:AC
*   来源:2010年北京邮电大学计算机研究生机试真题
*   总结:
**********************************/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int Matrix[5][5],Matrix2[5][5];
//翻转4个数 b = 2  翻转9个数 b = 3
//顺时针    a = 1  逆时针    a = 2
//旋转
int Rotate(int a,int b,int x,int y){
	int i,j;
	//顺时针
	if(a == 1){
		//翻转4个数
		if(b == 2){
			for(i = x;i < x+b;i++){
				for(j = y;j < y+b;j++){
					Matrix[j][2*(x+1)-i-1] = Matrix2[i][j];
				}
			}
		}
		//翻转9个数
		else{
			for(i = x;i < x+b;i++){
				for(j = y;j < y+b;j++){
					Matrix[j][2*(x+1)-i] = Matrix2[i][j];
				}
			}
		}
	}
	//逆时针
	else{
		//翻转4个数
		if(b == 2){
			for(i = x;i < x+b;i++){
				for(j = y;j < y+b;j++){
					Matrix[2*(x+1)-j-1][i] = Matrix2[i][j];
				}
			}
		}
		//翻转9个数
		else{
			for(i = x;i < x+b;i++){
				for(j = y;j < y+b;j++){
					Matrix[2*(x+1)-j][i] = Matrix2[i][j];
				}
			}
		}
	}
	return 0;
}

int main()
{
	int a,b,x,y;
	//freopen("C:\\Users\\SJF\\Desktop\\acm.txt","r",stdin);
    while(scanf("%d %d %d %d %d",&Matrix[1][1],&Matrix[1][2],&Matrix[1][3],&Matrix[1][4],&Matrix[1][5]) != EOF)
    {
		int i,j;
		//输入数据
		for(i = 1;i <= 5;i++){
			Matrix2[1][i] = Matrix[1][i];
		}
		for(i = 2;i <= 5;i++){
			for(j = 1;j <= 5;j++){
				scanf("%d",&Matrix[i][j]);
				Matrix2[i][j] = Matrix[i][j];
			}
		}
		scanf("%d %d %d %d",&a,&b,&x,&y);
		//旋转
		Rotate(a,b,x,y);
		//输出
		for(i = 1;i <= 5;i++){
			for(j = 1;j <= 5;j++){
				if(j != 5){
					printf("%d ",Matrix[i][j]);
				}
				else{
					printf("%d\n",Matrix[i][j]);
				}
			}
		}
    }
    return 0;
}
题目1171:C翻转

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:2016

解决:584

题目描述:

首先输入一个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
来源:
2010年北京邮电大学计算机研究生机试真题

抱歉!评论已关闭.