C语言典题图像旋转

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

第一行输入两个数

分别代表行和列第一行包含两个整数n和m,表示图像包含像素点的行数和列数。1≤n≤100,1≤m≤100。

接下来n行,每行m个整数,表示图像的每个像素点灰度。相邻两个整数之间用单个空格隔开,每个元素均在0∼255之间。

样例输入

3 3

1 2 3

4 5 6

7 8 9

样例输出

7 4 1

8 5 2

9 6 3

这题我们根据它的输入和输出位置的不同来找规律

例如输入的7的位置是(2,0),而输出的7的位置是(0,0)

输入的8的位置是(2,1),而输出的8的位置是(1,0)

以此类推,我们就可以知道旋转90度的本质是将先输出最后一排的第一个,然后从下往上输出这个数的一列,然后再最后一排的第二个,从下往上输出该一列,剩下的以此类推。值得注意的是要求相邻两个整数之间用单个空格隔开,所以每到一列的最后一个输出换行。

以下是源程序

#include<stdio.h>

int main()

{

    int n,m;

    scanf("%d %d",&n,&m);

    int i,j;

    int arr[n][m];

    for(i=0;i<n;i++)

    {

        for(j=0;j<m;j++)

        {

            scanf("%d",&arr[i][j]);

        }

    }

/*注意这里的i,j是针对原来输入而言的*/

/*一列一列的输出,是正序,因此列是递加*/

     for(j=0;j<m;j++)

     {

       /*注意是同一列倒着输出,所以行是递减*/

        for(i=n-1;i>=0;i--)

        {

            printf("%d ",arr[i][j]);

/*到一列最后一个时,输出换行*/

            if(i==0)

            {

             printf("\n");

   }

        }         

        

    }

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值