CCF NOI1049 旋转图像

来源:互联网 发布:摄氏度转华氏度 c语言 编辑:程序博客网 时间:2024/06/01 09:48

问题链接:CCF NOI1049 旋转图像




时间限制: 1000 ms  空间限制: 262144 KB

题目描述

  输入一个n行m列的黑白图像,将它顺时针旋转90度后输出。

输入

  第一行包含两个整数n和m,表示图像包含像素点的行数和列数。1 <= n <= 100,1 <= m <= 100。
  接下来n行,每行m个整数,表示图像的每个像素点灰度。相邻两个整数之间用单个空格隔开,每个元素均在0~255之间。

输出

  m行,每行n个整数,为顺时针旋转90度后的图像。相邻两个整数之间用单个空格隔开。

样例输入

3 3
1 2 3
4 5 6
7 8 9
样例输出

7 4 1
8 5 2
9 6 3

数据范围限制

  1 <= n <= 100,1 <= m <= 100。




问题分析

  这是一个矩阵旋转问题,在程序中就是一个二维数组的值旋转输出问题

  关键是下标的映射关系,找到这种映射关系,程序就简单了。

程序说明

  (略)

要点详解
  • 先定义一个符号常量,再用它来定义二维数组,可以使得程序的通用性得到提高
  • 二维数组下标的映射关系。



参考链接:CCF201503-1 图像旋转(100分)。

100分通过的C语言程序:

#include <stdio.h>#define N 100int a[N][N];int main(void){    int n, m, i, j;    scanf("%d%d", &n, &m);    for(i=0; i<n; i++)        for(j=0; j<m; j++)            scanf("%d", &a[i][j]);    for(j=0; j<m; j++) {        for(i=0; i<n; i++) {            if(i != 0)                printf(" ");            printf("%d", a[n - 1 - i][j]);        }        printf("\n");    }    return 0;}



0 0