对一个方阵转置,就是把原来的行号变列号,原来的列号变行号。例如,如下方阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 转置后变为: 1 5 9 13 2 6 10 14 3 7 11 15 4 8 12 16 但如果是对该方阵顺时针旋转(不是转置),却是如下结果: 13 9 5 1 14 10 6 2 15 11 7 3 16 12 8 4
这道题是在蓝桥杯中是填空题,主要找规律 // // 1 2 3 4 // 5 6 7 8 // 9 10 11 12 // 13 14 15 16
//13 9 5 1 //14 10 6 2 //15 11 7 3 //16 12 8 4 //找规律 // X Y // 0 3 3-0*4 // 1 7 3+1*4 // 2 11 3+2*4 // 3 15 3+3*4 // 4 2 2+0*4 // 5 6 2+1*4 // … // 8 1 1+0*4 // … // 12 0 0+0*4
include<iostream>
#include<stdio.h>
#include<malloc.h>
using namespace std;
void rotate(int *x,int rank)
{
int *y=(int*)malloc(sizeof(int)); //填空
for(int i=0;i<rank*rank;i++)
{ y[3-i/4+i%4*4]= x[i]; //填空
}
for(int i=0;i<rank*rank;i++) x[i]=y[i];
free(y);
}
int main(int argc,char *argv[])
{ int x[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
int rank=4;
rotate(&x[0][0],rank);
for(int i=0;i<rank;i++)
{ for(int j=0;j<rank;j++) printf("%4d",x[i][j]);
printf("\n");
}
return 0;
}