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

規律數組的打印

編輯:C++入門知識

規律數組的打印
【北京直真筆試題】打印數組如下4*4數組,要求打印N*N的數組?

1  12  11  10

2  13  16  9

3  14  15  8

4   5   6  7

【思路】:

 


1.發現規律;如上圖所示,仔細發現是有規律的,先第1、2、3、4步驟;我們發現第5、6、7…步驟和前面的1、2、3、4步驟是相同的,只是邊界值不同。

2.考慮實現;實現的問題轉換為先定義二維數組,數組的元素為0.然後的操作就是填值的過程。邊界值的確定采用層層剝離的思想。我們容易看出循環的次數正是N/2次。存在當N為奇數時需要單獨處理最後一個數的情況。

 【算法實現】:

//design[思想:層層剝離.]

[cpp] 
void designArray(int nArray[][g_nCnt], int nSize) 

        int nBase = 1; 
         for(int i = 0; i < g_nCnt/2; i++) 
         { 
                  for(int j = i; j < g_nCnt-i; j++) 
                   { 
                           nArray[i][j] = nBase++; 
                   } 
 
                   for(int j = i+1; j < g_nCnt-i; j++) 
                   { 
                            nArray[j][g_nCnt-i-1] = nBase++; 
                   } 
 
                   for(int j = g_nCnt-i-2; j >= i; j--) 
                   { 
                            nArray[g_nCnt-i-1][j] = nBase++; 
                   } 
 
                   for(int j = g_nCnt-i-2; j > i; j--) 
                   { 
                            nArray[j][i] = nBase++; 
                   } 
 
                   if(nSize%2 == 1) 
                   { 
                           nArray[nSize/2][nSize/2] = nBase; 
                   } 
         }//end for i 

 
  
 
//printArray 
void printArray(int nArray[][g_nCnt], int nSize) 

        static int s_nCnt = 0; 
         cout << "----------------------DESIGN " << ++s_nCnt ; 
         cout << "----------------------"  << endl; 
         for(int i=0; i <nSize; i++) 
         { 
                  for(int j =0; j < nSize; j++) 
                   { 
                      cout << nArray[i][j] << "\t"; 
                   }//end for j 
                   cout << endl; 
         }//end for i 
         cout << "----------------------\\DESIGN " << s_nCnt ; 
         cout << "----------------------"  << endl;  
         cout << endl << endl; 

 
  
 
  
 
void designArray_t(int nArray[][g_nCnt], int nSize) 

         int nBase = 1; 
         for(int i = 0; i < g_nCnt/2; i++) 
         { 
                   for(int j = i; j < g_nCnt-i; j++) 
                  { 
                       nArray[j][i] = nBase++; 
                   } 
 
                   for(int j = i+1; j < g_nCnt-i; j++) 
                   { 
                       nArray[g_nCnt-i-1][j] = nBase++; 
                   } 
 
                  for(int j = g_nCnt-i-2; j >= i; j--) 
                  { 
                        nArray[j][g_nCnt-i-1] = nBase++; 
                   } 
 
                    for(int j = g_nCnt-i-2; j > i; j--) 
                   { 
                           nArray[i][j]= nBase++; 
 
                   } 
 
                   if(nSize%2 == 1) 
                   { 
                            nArray[nSize/2][nSize/2] = nBase; //N為奇數,最後元素的處理.     
 
                   } 
         }//end for i 

     [運行結果]:

      

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