转方阵

来源:互联网 发布:网络爬虫 apk 编辑:程序博客网 时间:2024/04/30 03:37

原题

 

    对一个方阵转置,就是把原来的行号变列号,原来的列号变行号

    例如,如下的方阵:

 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;
}

 

请分析代码逻辑,并推测划线处的代码。

答案写在 “解答.txt” 文件中

注意:只写划线处应该填的内容,划线前后的内容不要抄写。

 

 算法

1.对于4*4阶矩阵顺时针转换90度,即将x[i][j]单元内容换到x[j][3-i]

2.而二阶数组x[i][j]单元用一阶数组表示为X[i * 4 + j]单元

源代码

#include<stdio.h>
#include<stdlib.h>
void rotate(int* x, int rank)
{
 int* y = (int*)malloc(sizeof(int) * 16);  // 填空

 for(int i=0; i<rank * rank; i++)
 {
  y[(i % 4) * 4 + (3 - i / 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");
 }
    system("pause");
 return 0;
}

答案

 

sizeof(int) * 16

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

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手机视频音量小怎么办 苹果6内存不够怎么办 wiwox7忘记密码了怎么办 wiwo手机声音小怎么办 海信手机声音小怎么办 ppos手机声音小怎么办 手机铃声太小怎么办 手机声音没有了怎么办 vivo外放没声音怎么办 fgo关服充的钱怎么办 淘宝提前收货了怎么办 淘宝直播间没人怎么办 花呗地区限制怎么办 支付宝花呗账单错误怎么办 台球厅生意惨淡怎么办 退货少了东西怎么办 微店注册id怎么办 卖红酒没有客源怎么办 来姨妈10天没走怎么办 京东违反广告法怎么办 支付宝定位错误怎么办 银行账户未年审怎么办 淘宝集运禁运品 怎么办 物流显示禁运品怎么办 淘宝禁运品怎么办呢 货物退回日本了怎么办 淘宝卖家寄多了衣服怎么办 集运地址选错怎么办 淘宝卖韩国化妆品退货怎么办 去韩国留学手机怎么办 韩国办无线网怎么办 淘宝卖家被骗怎么办 淘宝买软件被骗怎么办 被淘宝店诈骗怎么办? 支付宝被骗2000怎么办 给私人打款后不发货怎么办 毕业证寄丢了怎么办 微商下单返现被骗一千四怎么办 淘宝买东西卡里多扣钱怎么办 付款了卖家不发货怎么办 淘宝客服不解决问题怎么办