2012年第三届蓝桥杯C/C++程序设计本科B组省赛 方阵旋转(代码填空)

来源:互联网 发布:淘宝众筹 淘宝怎么不管 编辑:程序博客网 时间:2024/05/01 10:30
方阵旋转    
对一个方阵转置,就是把原来的行号变列号,原来的列号变行号
例如,如下的方阵:
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
下面的代码实现的功能就是要把一个方阵顺时针旋转。
void rotate(int* x, int rank)  {      int* y = (int*)malloc(___________________);  // 填空        for(int i=0; i<rank * rank; i++)      {          y[_________________________] = x[i];  // 填空      }        for(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;  }  




答案: sizeof(int) * rank * rank

           (i % 4) * 4 + 3 - (i / 4)


答案: sizeof(int) * rank * rank

           (i % 4) * 4 + 3 - (i / 4)
0 0
原创粉丝点击