帆軟筆試題(一)


題目:下圖是一個10x10的棋盤,每一個小格子都是一個同樣邊長的正方形,問這個棋盤中,總共包含了多少個正方形?同時使用程序寫出計算過程。

這題很簡單,但是,為什么我要把這題記錄下來,因為我第一眼反應出來的竟然是100!丟人啊!

(假設邊長為10)

好了,思路:把棋盤看做一個二維數組,遍歷每一個小格子,以它為基點,去擴展邊長為1的方格,邊長為2的方格,...,一直到接觸到邊界。

代碼:

public class Rect {
  public int[][] rectGenerate(int row, int column) {
    int Array [][] = new int [row][ ];
    for (int i = 0; i < Array.length; i++) {
      Array[i] = new int [column];
      for (int j = 0; j <Array[i].length; j++) {
        Array[i][j] = i+j;
      }
    }
    return Array;
  } 

 
  public void rectPrint(int [][] rectArray){
    for (int i = 0; i < rectArray.length; i++) {
      for (int j = 0; j <rectArray[i].length; j++) {  
        System.out.print("口 ");
      }
      System.out.println();
    }
  }

  public int rectCount(int [][] rectArray) {
    int result = 0;
    //按每個小正方形為基點遍歷整個數組
    for (int i = 0; i < rectArray.length; i++) {
      for (int j = 0; j <rectArray[i].length; j++) {
        //以此為基點向外擴展

        //改變邊界判定條件就能找矩形
        for (int k = 0; k < (((rectArray.length-i)>=(rectArray[i].length-j))?(rectArray[i].length -j):(rectArray.length-i)); k++) {
          result ++;
        }
      }
    }
    return result;
  }
  
  public static void main(String[] args) {

    Rect rect = new Rect();
    int [][] rectArray = rect.rectGenerate(2, 10);
    rect.rectPrint(rectArray);
    System.out.println("小正方形個數:" + rect.rectCount(rectArray));

    int [][] squareArray = rect.rectGenerate(10, 10);
    rect.rectPrint(squareArray);
    System.out.println("小正方形個數:" + rect.rectCount(squareArray));


  }
}

結果:

口 口 口 口 口 口 口 口 口 口
口 口 口 口 口 口 口 口 口 口
小正方形個數:29
口 口 口 口 口 口 口 口 口 口
口 口 口 口 口 口 口 口 口 口
口 口 口 口 口 口 口 口 口 口
口 口 口 口 口 口 口 口 口 口
口 口 口 口 口 口 口 口 口 口
口 口 口 口 口 口 口 口 口 口
口 口 口 口 口 口 口 口 口 口
口 口 口 口 口 口 口 口 口 口
口 口 口 口 口 口 口 口 口 口
口 口 口 口 口 口 口 口 口 口
小正方形個數:385

 

---恢復內容結束---


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM