帆软笔试题(一)

题目:下图是一个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

 

---恢复内容结束---

posted @ 2018-03-13 18:47  Bit_bo  阅读(6801)  评论(5编辑  收藏  举报