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

方陣順時針旋轉

編輯:C++入門知識

  例如,如下的方陣:


 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

 

[cpp]
#include <stdio.h>  
void rotate(int* x, int rank) 

    int* y = (int*)malloc(sizeof(int) * rank * rank);   
 
    for(int i=0; i<rank * rank; i++) 
    { 
         // 以原第一行進行分析  一行數變為同一列  以原第一列為例,變為同一行。  (i%rank)*rank使列變為行   rank-(i/rank)-1) 使行變為列  
        y[(i%rank)*rank+(rank-(i/rank)-1) ] = 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; 

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

 for(int i=0; i<rank * rank; i++)
 {
         // 以原第一行進行分析  一行數變為同一列  以原第一列為例,變為同一行。  (i%rank)*rank使列變為行   rank-(i/rank)-1) 使行變為列
  y[(i%rank)*rank+(rank-(i/rank)-1) ] = 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;
}

 

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