程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 對方陣順時針旋轉

對方陣順時針旋轉

編輯:C++入門知識

/*對一個方陣轉置,就是把原來的行號變列號,原來的列號變行號
例如,如下的方陣:           轉置後變為:
                    
1  2  3  4                              1  5  9 13
5  6  7  8                              2  6 10 14
9  10 11 12                             3  7 11 15
13 14 15 16                             4  8 12 16
但,如果是對該方陣順時針旋轉(不是轉置),卻是如下結果:
13  9  5  1
14 10  6  2
15 11  7  3
16 12  8  4     下面的代碼實現的功能就是要把一個方陣順時針旋轉。*/
#include"stdio.h"
#include"stdlib.h"
//旋轉就相當於是先轉置,然後將每一行的數進行倒序即ok
void rotate(int* x, int rank)
{ int* y = (int*)malloc(16*sizeof(int)); // 填空
 
    for(int i=0; i<rank * rank; i++)
    {
        y[(rank-i/rank-1)+rank*(i%rank) ] = x[i];// 填空,這裡這樣思考:要是y[]=x[i];第一步實現轉置
  //轉置就得確定行和列,原來的行->列,列->行 如果原來的地址是a*rank+b=i;
  //現在必須是b*rank+a=i;
  //然後每一行倒序,rank-a-1;這裡a=i/rank;b=i%rank;
 }

    for(int i=0;i<rank*rank;i++)
    {
        x[i] = y[i];//改變x的值
    }

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

 

 

\

 

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved