題目:下圖是一個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
---恢復內容結束---
