图片旋转 (30 分)(模拟)

简介: 图片旋转 (30 分)(模拟)

二维图片由一个个像素点组成,目前灰度图像使用一个0-255之间的整数表示某个像素点的像素值。编程完成图片旋转控制程序。


本题目要求读入2个整数m和n(<=20),作为图片的长宽尺寸。输入1个整数r,作为旋转角度(只能输入90 180 -90中的一个,90表示图形向左旋转90度,-90表示图形向右旋转90度)。然后按照行列输入图片像素值,


输入格式:

第一行:2个整数m和n(<=20)

第二行:2个整数r(只能是90 180 -90中的一个,否则提示:angle data error

第三行以后:输入m行n列的整数数据,必须在0-255之间,否则提示:matrix data error

以上输入的都是整数,若有非整数的数据输入,统一提示:data type error


输出格式:

按要求旋转后的图片矩阵数据


输入样例:

在这里给出一组输入。例如:

3 4
90
1 2 3 4
5 6 7 8
9 10 11 12


输出样例:

在这里给出相应的输出。例如:

1. 4 8 12
2. 3 7 11
3. 2 6 10
4. 1 5 9


方法一:用整形数组模拟

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int a[][] = new int[30][30];
        int m = in.nextInt();
        int n = in.nextInt();
        int r = in.nextInt();
        int t = 0,i,j;
        if(r != 90 && r != 180 && r != -90) System.out.println("angle data error");
        else
        {
            for(i=0;i<m;i++)
            {
                for(j=0;j<n;j++)
                {
                    if(in.hasNextInt()) a[i][j] = in.nextInt();
                    else t = 1;
                    if(a[i][j] < 0 || a[i][j] > 255)
                        System.out.println("matrix data error");
                }
            }
            if(t == 1) System.out.println("data type error");
            else
            {
                if(r == 90)
                {
                    for(i=n-1;i>=0;i--)
                    {
                        for(j=0;j<m;j++)
                        {
                            if(j != 0) System.out.print(' ');
                            System.out.print(a[j][i]);
                        }
                        System.out.println();
                    }
                }
                else if(r == -90)
                {
                    for(i=0;i<n;i++)
                    {
                        for(j=m-1;j>=0;j--)
                        {
                            if(j != m-1) System.out.print(' ');
                            System.out.print(a[j][i]);
                        }
                        System.out.println();
                    }
                }
                else
                {
                    for(i=m-1;i>=0;i--)
                    {
                        for(j=n-1;j>=0;j--)
                        {
                            if(j != n-1) System.out.print(' ');
                            System.out.print(a[i][j]);
                        }
                        System.out.println();
                    }
                }
            }
        }
    }
}


方法二:用字符串数组模拟

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String a[][] = new String[30][10];
        int m = in.nextInt();
        int n = in.nextInt();
        if(in.hasNextInt())
        {
            int r = in.nextInt();
            int flag = 0;
            if(r != 90 && r != 180 && r != -90)
            {
                System.out.println("angle data error");
                flag = 1;
            }
            int i,j,k;
            int t1 = 0,t2 = 0;
            for(i=0;i<m;i++)
            {
                for(j=0;j<n;j++)
                {
                    String x = in.next();
                    a[i][j] = x;
                    int t = 0;
                    char op[]=x.toCharArray();
                    for(k=0;k<op.length;k++)
                    {
                        if(Character.isDigit(op[k])) t = 0;
                        else t = 1;
                    }
                    if(t == 1) t2 = 1;
                    else
                    {
                        int sum = Integer.parseInt(x);
                        if(sum < 0 || sum > 255) t1 = 1;
                    }
                }
            }
            if(t1 == 1 && flag == 0) System.out.println("matrix data error");
            if(t2 == 1 && t1 == 0 && flag == 0) System.out.println("data type error");
            if(t1 == 0 && t2 == 0 && flag == 0)
            {
                if(r == 90)
                {
                    for(i=n-1;i>=0;i--)
                    {
                        for(j=0;j<m;j++)
                        {
                            if(j != 0) System.out.print(' ');
                            System.out.print(a[j][i]);
                        }
                        System.out.println();
                    }
                }
                else if(r == -90)
                {
                    for(i=0;i<n;i++)
                    {
                        for(j=m-1;j>=0;j--)
                        {
                            if(j != m-1) System.out.print(' ');
                            System.out.print(a[j][i]);
                        }
                        System.out.println();
                    }
                }
                else
                {
                    for(i=m-1;i>=0;i--)
                    {
                        for(j=n-1;j>=0;j--)
                        {
                            if(j != n-1) System.out.print(' ');
                            System.out.print(a[i][j]);
                        }
                        System.out.println();
                    }
                }
            }
        }
        else System.out.print("data type error");
    }
}



目录
相关文章
|
资源调度 前端开发 JavaScript
Python学习二:Python包管理器pip
这篇文章介绍了Python包管理器pip的基本概念、基本操作、如何更改下载源为国内镜像以加速下载,以及如何指定安装包的位置。
628 0
Python学习二:Python包管理器pip
|
5天前
|
人工智能 JavaScript Linux
【Claude Code 全攻略】终端AI编程助手从入门到进阶(2026最新版)
Claude Code是Anthropic推出的终端原生AI编程助手,支持40+语言、200k超长上下文,无需切换IDE即可实现代码生成、调试、项目导航与自动化任务。本文详解其安装配置、四大核心功能及进阶技巧,助你全面提升开发效率,搭配GitHub Copilot使用更佳。
|
6天前
|
存储 人工智能 自然语言处理
OpenSpec技术规范+实例应用
OpenSpec 是面向 AI 智能体的轻量级规范驱动开发框架,通过“提案-审查-实施-归档”工作流,解决 AI 编程中的需求偏移与不可预测性问题。它以机器可读的规范为“单一真相源”,将模糊提示转化为可落地的工程实践,助力开发者高效构建稳定、可审计的生产级系统,实现从“凭感觉聊天”到“按规范开发”的跃迁。
856 13
|
3天前
|
云安全 安全
免费+限量+领云小宝周边!「阿里云2026云上安全健康体检」火热进行中!
诚邀您进行年度自检,发现潜在风险,守护云上业务连续稳健运行
1166 1
|
5天前
|
人工智能 JavaScript 前端开发
【2026最新最全】一篇文章带你学会Cursor编程工具
本文介绍了Cursor的下载安装、账号注册、汉化设置、核心模式(Agent、Plan、Debug、Ask)及高阶功能,如@引用、@Doc文档库、@Browser自动化和Rules规则配置,助力开发者高效使用AI编程工具。
710 4
|
6天前
|
消息中间件 人工智能 Kubernetes
阿里云云原生应用平台岗位急招,加入我们,打造 AI 最强基础设施
云原生应用平台作为中国最大云计算公司的基石,现全面转向 AI,打造 AI 时代最强基础设施。寻找热爱技术、具备工程极致追求的架构师、极客与算法专家,共同重构计算、定义未来。杭州、北京、深圳、上海热招中,让我们一起在云端,重构 AI 的未来。
|
8天前
|
IDE 开发工具 C语言
【2026最新】VS2026下载安装使用保姆级教程(附安装包+图文步骤)
Visual Studio 2026是微软推出的最新Windows专属IDE,启动更快、内存占用更低,支持C++、Python等开发。推荐免费的Community版,安装简便,适合初学者与个人开发者使用。
980 11
|
5天前
|
存储 人工智能 测试技术
【Claude Skills】从原理到实战的完全指南
Claude Skills通过模块化设计,将AI变为领域专家,实现工作流标准化。它支持指令封装、自动触发与脚本集成,提升复用性与协作效率,适用于个人提效与团队协同,是AI定制化的新范式。
|
11天前
|
存储 JavaScript 前端开发
JavaScript基础
本节讲解JavaScript基础核心知识:涵盖值类型与引用类型区别、typeof检测类型及局限性、===与==差异及应用场景、内置函数与对象、原型链五规则、属性查找机制、instanceof原理,以及this指向和箭头函数中this的绑定时机。重点突出类型判断、原型继承与this机制,助力深入理解JS面向对象机制。(238字)

热门文章

最新文章