数学问题——旋转图像

知识点

  • 字符数组存储字符串
  • 字符串转换为 int 类型数组 str[i]-'0'
  • 数组直接定义好大小,否则会出现 bug

int arr[55][55] 而不是 int arr[N][M]

  • 定义图像反转方法
  1. 传入参数

行、列、待转换数组、结果数组

  1. 形参用引用形式返回 int (&ans)[55][55]
  2. 图像旋转旋转 90° ,其他可用 90° 转化

后来行号 = 原来列号

后来列号 = 行数 - 1- 原来行号

  • switch case 语句的使用

代码

/*
设置数组时直接定义比输入规模大的数组不要 int arr[N][M] 
*/

#include<iostream>
#include<string.h>
using namespace std;

void convert_0(int N, int M, int arr[55][55], int (&ans)[55][55]){
    
    for(int i=0;i<N;i++){
        for(int j=0;j<M;j++){
            
            ans[i][j] = arr[i][j];
        }
    }
}

void convert_90(int N, int M, int arr[55][55], int (&ans)[55][55]){
    
    for(int i=0;i<N;i++){
        for(int j=0;j<M;j++){
            
            ans[j][N-1-i] = arr[i][j];
        }
    }
}

void print(int N, int M, int ans[55][55]){
    
    for(int i=0;i<N;i++){
        for(int j=0;j<M;j++){
            
            cout<<ans[i][j];
        }
        
        cout<<endl;
    }
}

int main(){
    
    int T, N, M; //T 组 N 行 M 列
    int angle;
    char str[55];
    int arr[55][55];
    int ans[55][55];
    cin>>T;
    
    while(T--){
        
        memset(arr, 0, sizeof(arr)); //初始化
        memset(ans, 0, sizeof(ans));
        memset(str, '0', sizeof(str));
         
        cin>>N>>M;
        
        
        for(int i=0;i<N;i++){ //字符串转换为 int 数组 
            
            cin>>str;
            for(int j=0;j<strlen(str);j++){
                
                arr[i][j] = str[j] - '0';
            }
        }
        
        cin>>angle;
        
        switch(angle){
            
            case 0:
                convert_0(N, M, arr, ans);
                print(N, M, ans);
                break;
            case 90:
                convert_90(N, M, arr, ans);
                print(M, N, ans);
                break;
            case 180:
                convert_90(N, M, arr, ans);
                convert_90(M, N, ans, arr);
                print(N, M, arr);
                break;
            case 270:
                convert_90(N, M, arr, ans);
                convert_90(M, N, ans, arr);
                convert_90(N, M, arr, ans);
                print(M, N, ans);
                break;
            default:
                break;
        }
    } 
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,428评论 0 2
  • 本文是我自己在秋招复习时的读书笔记,整理的知识点,也是为了防止忘记,尊重劳动成果,转载注明出处哦!如果你也喜欢,那...
    波波波先森阅读 2,864评论 0 10
  • 谁寄相思春晚后?漠漠游丝,一任飘零久。浅恨新愁频俯首,阑珊心绪年年有。 好梦难圆还知否?老去情怀,尽付樽中酒。醉里...
    圓月阅读 314评论 4 10
  • 周一:魏福净 徐鹏程 周二:胡王亚 王富城 周三:吴钰锋 李俊 周四:杜小青 李艳 周五:王如梦 成俊波 周一到周...
    唯杰不爱阅读 259评论 0 0
  • 许多时候,我们需要带着面具生活,在不同的场合,对待不同的人,都需要用不同的表情或语言去表达,这种方式本身就是心计。...
    嗅到海棠香阅读 1,251评论 0 0