| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1181 人关注过本帖
标题:如何将一个行列为奇数的方阵旋转,如旋转90°
只看楼主 加入收藏
丶黑白格
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2016-11-17
结帖率:0
收藏
已结贴  问题点数:20 回复次数:3 
如何将一个行列为奇数的方阵旋转,如旋转90°
测试数据有多组,处理到文件尾。每组测试数据的第一行输入2个整数n,m(1<n<20,1<=m<=100),接下来输入n行数据,每行n个整数。
例子:
3 1
4 9 2
3 5 7            
8 1 6
变成
8 3 4
1 5 9
6 7 2

搜索更多相关主题的帖子: 如何 
2016-11-17 22:27
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:7 


[fly]存在即是合理[/fly]
2016-11-18 12:44
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:7 
作业是没人帮你做的,我仅仅给你一个旋转算法

程序代码:
#include <algorithm>

template<typename T, size_t N>
void MatrixRotate( T (&matrix)[N][N] )
{
    for( size_t r=0; r!=N/2; ++r )
    {
        for( size_t c=r; c+r+1!=N; ++c )
        {
            std::swap( matrix[r][c], matrix[N-1-c][r] );
            std::swap( matrix[N-1-c][r], matrix[N-1-r][N-1-c] );
            std::swap( matrix[N-1-r][N-1-c], matrix[c][N-1-r] );
        }
    }
}

#include <iostream>
using namespace std;

template<typename T, size_t R, size_t C>
void OutputMatrix( T (&matrix)[R][C] )
{
    for( size_t i=0; i!=R*C; ++i )
        cout << matrix[i/C][i%C] << " \n"[i%C==C-1];
}

int main( void )
{
    int s1[1][1] = { 4 };
    MatrixRotate( s1 );
    OutputMatrix( s1 );

    cout << "-------------\n";

    int s2[2][2] = { 4, 9
                   , 3, 5 };
    MatrixRotate( s2 );
    OutputMatrix( s2 );

    cout << "-------------\n";

    int s3[3][3] = { 4, 9, 2
                   , 3, 5, 7
                   , 8, 1, 6 };
    MatrixRotate( s3 );
    OutputMatrix( s3 );

    return 0;
}

2016-11-21 09:20
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:7 
单纯的旋转也是有迹可循吧

程序代码:
#include<stdio.h>

#define N 5

int main()
{
    int i,j;
    int s[N][N]={{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20},{21,22,23,24,25}};
    printf("原始矩阵:\n");
    for(i=0;i<N;i++)
    {
        for(j=0;j<N;j++) printf("%4d",s[i][j]);
        printf("\n");
    }
    printf("\n\n旋转后矩阵:\n");
    for(i=0;i<N;i++)
    {
        for(j=0;j<N;j++) printf("%4d",s[j][N-i-1]);
        printf("\n");
    }
    return 0;
}

DO IT YOURSELF !
2016-11-21 09:56
快速回复:如何将一个行列为奇数的方阵旋转,如旋转90°
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015906 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved