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

spiral matrix,spiral

編輯:C++入門知識

spiral matrix,spiral


如圖,生成如此旋轉的矩陣 輸入行N,列M,求上述矩陣

假定 縱向為x軸,橫向為y軸,從1開始

層數 k=min(i,j,N+1-i,M+1-j)

k層矩陣的長 l=N-(k-1)*2  寬 w=M-(k-1)*2

矩陣左上角的坐標值為(k,k),根據外層矩陣的長寬可以算出數值,進而確定當前矩陣(i,j)的值

 

缺點 :代碼中有很多重復計算,可以通過記錄一些值來減少計算次數

#include<stdio.h>

#define min(x,y) (x)>(y)?(y):(x)
int N,M;
int foo(int,int);

int main()
{

    while(scanf("%d %d",&N,&M)==2)
        for(int i=1;i<=N;i++)
        {
            for(int j=1;j<=M;j++)
            {
                printf("%3d ",foo(i,j));
            }
            printf("\n");
        }
}



int foo(int i,int j)
{
    int k=min( min(i,j) , min(N+1-i,M+1-j) );
    int l=N-(k-1)*2, w=M-(k-1)*2;
    int s=0;
    
    for( int t=1;t<k;t++ )
    {
        int l=N-(t-1)*2, w=M-(t-1)*2;
        s+=(l-1)*2+(w-1)*2;
    }
    s++;
    
    if(l==1) s+=j-k;
    else if(w==1) s+=i-k;
    else
    {
        if(i==k) s+=j-k;
        else if(j==k+w-1) s+=w-1+i-k;
        else if(i==k+l-1) s+=w-1+l-1+k+w-1-j;
        else s+=w-1+l-1+w-1+k+l-1-i;
    }
    return s;
}

 

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