九度oj 题目1171:C翻转

题目描述:

首先输入一个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

题目没有说明那个是x轴,那个是y轴。
这里竖的是x轴,横的是y轴
代码如下
 1 #include <cstdio>
 2 #include <algorithm>
 3 int num[6][6];
 4 int tmp[4][4];
 5 
 6 int main(int argc, char const *argv[])
 7 {
 8     //freopen("input.txt","r",stdin);
 9     while(scanf("%d",&num[1][1]) != EOF) {
10         for(int i = 2; i <= 5; i++) {
11             scanf("%d",&num[1][i]);
12         }
13         for(int i = 2; i <= 5; i++) {
14             for(int j = 1; j <= 5; j++) {
15                 scanf("%d",&num[i][j]);
16             }
17         }
18         int a,b,x,y;
19         scanf("%d %d %d %d",&a,&b,&x,&y);
20         if(a == 2 && b == 2) {//ni
21             int tmp = num[x][y];
22             num[x][y] = num[x][y+1];
23             num[x][y+1] = num[x+1][y+1];
24             num[x+1][y+1] = num[x+1][y];
25             num[x+1][y] = tmp;
26         }
27         else if(a == 1 && b == 2) {//shun
28             int tmp = num[x][y];
29             num[x][y] = num[x+1][y];
30             num[x+1][y] = num[x+1][y+1];
31             num[x+1][y+1] = num[x][y+1];
32             num[x][y+1] = tmp;
33         }
34         else if(b == 3) {
35             int tmp[4][4];
36             for(int i = 1; i <= 3; i++) {
37                 for(int j = 1; j <= 3; j++) {
38                     tmp[i][j] = num[x+i-1][y+j-1];
39                 }
40             }
41             if(a == 1) {
42                 for(int i = 1; i <= 3; i++) {
43                     for(int j = 1; j <= 3; j++) {
44                         num[x+i-1][y+j-1] = tmp[4-j][i];
45                     }
46                 }
47             }
48             else if(a == 2) {
49                 for(int i = 1; i <= 3; i++) {
50                     for(int j = 1; j <= 3; j++) {
51                         num[x+i-1][y+j-1] = tmp[j][4-i];
52                     }
53                 }
54             }
55         }
56         for(int i = 1; i <= 5; i++) {
57             printf("%d",num[i][1]);
58             for(int j = 2; j <= 5; j++) {
59                 printf(" %d",num[i][j]);
60             }
61             printf("\n");
62         }
63         
64     }
65     return 0;
66 }

 

转载于:https://www.cnblogs.com/jasonJie/p/5808391.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值