矩阵旋转

C翻转

http://www.nowcoder.com/questionTerminal/a591300637874f6ba2316a5fe3e94579

矩阵旋转:
顺时针旋转,把矩阵上下转换,然后沿主对角线交换
逆时针旋转,把矩阵左右转换,然后沿主对角线交换


#include<iostream>
#include<vector>
using namespace std;
int a[6][6],o1,o2,x,y;
void swap(int &x,int &y){
    int temp=x;
    x=y;y=temp;
}
void updown(int x,int y,int len){//len代表矩阵的长和宽 
    for(int j=0;j<len;j++){
        for(int i=0;i<len/2;i++){
            swap(a[x+i][y+j],a[x+len-1-i][y+j]);
        }
    }

} 
void leftright(int x,int y,int len){
    for(int i=0;i<len;i++){
        for(int j=0;j<len/2;j++){
            swap(a[x+i][y+j],a[x+i][y+len-1-j]);
        }
    }
}
void rev(int x,int y,int len){
    for(int i=0;i<len;i++){
        for(int j=i+1;j<len;j++){
            swap(a[x+i][y+j],a[x+j][y+i]); 
        } 
    }
}
void print(){
    for(int i=1;i<6;i++){
        for(int j=1;j<6;j++){
            cout<<a[i][j]<<" ";
        }cout<<endl;
    }
}
int main(){
    while(cin>>a[1][1]){
        for(int i=1;i<6;i++){
            for(int j=1;j<6;j++){
                if(i==1&&j==1)continue;
                cin>>a[i][j];
            }
        }cin>>o1>>o2>>x>>y;
        if(o1==1&&o2==2){
            updown(x,y,2);
            rev(x,y,2);
        }else if(o1==1&&o2==3){
            updown(x,y,3);
            rev(x,y,3);
        }else if(o1==2&&o2==2){
            leftright(x,y,2);
            rev(x,y,2);
        }else{
            leftright(x,y,3);
            rev(x,y,3);
        }
        print();
    }
    return 0;
} 
全部评论

相关推荐

爱吃肉的伊登在写日记:好棒,27届简历能做成这个样子,但是第一个项目感觉cover住难度还是不小的,特别是二面的时候肯定要对分布式系统设计这一块儿有高出正常面试者的水平才行
点赞 评论 收藏
分享
05-13 02:01
已编辑
惠州学院 前端工程师
安静的少年在求佛:建议把公司名字写到标题。以后有人想搜就能直接搜到
点赞 评论 收藏
分享
评论
5
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务