帆软笔试题(一)
题目:下图是一个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
---恢复内容结束---