2015年6月29日 星期一

常考的面試題:畫星星(共八種)

畫這個星星有很種方式,我個人覺得這種方式比較不容易忘
行   1   2   3
星   3   2   1
第一行有三顆星,第二行有兩顆星,第三行有一顆星。
想辦法想出一個公式,譬如3=1*3也等於1+2,也等於根號9…等
三行只是視意,要動態的方式想,譬如
行   1   2   3   4   5
星   5   4   3   2   1
,我想到的是:最後一行 + 1 - 行
先看最上面的行那一行:
第一行-->3+1-1=3(星數),第二行-->3+1-2=2(星數),第三行-->3+1-3=1(星數)
同樣的,五行也是一樣

做法:

第一個迴圈負責行,第二個迴圈負責星,將公式放到星數那一行
***
**
*
private static void start1(int startCount) {
    System.out.println();
    for (int i = 1; i <= startCount; i++) {// 行數
        for (int j = 1; j <= startCount + 1 - i; j++) {// 星數
            System.out.print("*");
        }
        System.out.println();
    }
}
行   1   2   3
星   1   2   3
公式:行
*
**
***
private static void start2(int startCount) {
    System.out.println();
    for (int i = 1; i <= startCount; i++) {// 行數
        for (int j = 1; j <= i; j++) {// 星數
            System.out.print("*");
        }
        System.out.println();
    }
}
這裡開始會有輸入空格的情形,也就是要多一個迴圈
行   1   2   3
空   0   1   2
星   3   2   1
空格公式:行 - 1
星號公式:最後一行 + 1 - 行
***
 **
  *
private static void start3(int startCount) {
    System.out.println();
    for (int i = 1; i <= startCount; i++) {// 行數
        for (int j = 1; j <= i-1; j++) {// 空格數
            System.out.print(" ");
        }
        for (int j = 1; j <= startCount + 1 - i; j++) {// 星數
            System.out.print("*");
        }
        System.out.println();
    }
}
行   1   2   3
空   2   1   0
星   1   2   3
空格公式:最後一行 - 行
星號公式:行
  *
 **
***
private static void start4(int startCount) {
    System.out.println();
    for (int i = 1; i <= startCount; i++) {// 行數
        for (int j = 1; j <= startCount-i; j++) {// 空格數
            System.out.print(" ");
        }
        for (int k = 1; k <= i; k++) {// 星數
            System.out.print("*");
        }
        System.out.println();
    }
}
行   1   2   3
空   2   1   0
星   1   3   5
空格公式:最後一行 - 行
星號公式:行 * 2 - 1
  *
 ***
*****
private static void start5(int startCount) {
    System.out.println();
    for (int i = 1; i <= startCount; i++) {// 行數
        for (int j = 1; j <= startCount-i; j++) {// 空格數
            System.out.print(" ");
        }
        for (int k = 1; k <= i*2-1; k++) {// 星數
            System.out.print("*");
        }
        System.out.println();
    }
}
行   1   2   3
空   0   1   2
星   5   3   1
空格公式:行 - 1
星號公式:(最後一行 - 行) * 2 + 1
*****
 ***
  *
private static void start6(int startCount) {
    System.out.println();
    for (int i = 1; i <= startCount; i++) {// 行數
        for (int j = 1; j <= i-1; j++) {// 空格數
            System.out.print(" ");
        }
        for (int k=1;k<=2*(startCount-i)+1;k++) {// 星數
            System.out.print("*");
        }
        System.out.println();
    }
} 
上三角形:
行   1   2   3
空   2   1   0
星   1   3   5
空格公式:最後一行 - 行
星號公式:行 * 2 - 1

下三角形(中間不算):
行   1   2
空   1   2
星   3   1
空格公式:行
星號公式:(最後一行 - 行) * 2 + 1
  *
 ***
*****
 ***
  *
private static void start7(int startCount) {
    System.out.println();
    for (int i = 1; i <= startCount; i++) {// 行數
        for (int j = 1; j <= startCount-i; j++) {// 空格數
            System.out.print(" ");
        }
        for (int k = 1; k <= i*2-1; k++) {// 星數
            System.out.print("*");
        }
        System.out.println();
    }
 
    startCount -= 1;//扣中間那一行
    for (int x = 1; x <= startCount; x++) {// 行數
        for (int y = 1; y <= x; y++) {// 空格數
            System.out.print(" ");
        }
        for (int z=1;z<=2*(startCount-x)+1;z++) {// 星數
            System.out.print("*");
        }
        System.out.println();
    }
}
上三角形:
行   1   2   3
空   0   1   2
星   5   3   1
空格公式:行 - 1
星號公式:(最後一行 - 行) * 2 + 1

下三角形(中間不算):
行   1   2
空   1   0
星   3   5
空格公式:最後一行 - 行
星號公式:行 * 2 + 1
*****
 ***
  *
 ***
*****
private static void start8(int startCount) {
    System.out.println();
    for (int i = 1; i <= startCount; i++) {// 行數
        for (int j = 1; j <= i-1; j++) {// 空格數
            System.out.print(" ");
        }
        for (int k=1;k<=2*(startCount-i)+1;k++) {// 星數
            System.out.print("*");
        }
        System.out.println();
    }
 
    startCount -= 1;//扣中間那一行
    for (int x = 1; x <= startCount; x++) {// 行數
        for (int y = 1; y <= startCount-x; y++) {// 空格數
            System.out.print(" ");
        }
        for (int z = 1; z <= x*2+1; z++) {// 星數
            System.out.print("*");
        }
        System.out.println();
    }
}
總結:用這種方法,什麼ijkxyz永遠都是1,永遠都是<=,永遠都是ijkxyz++,看起來一目了然,比較舒服

沒有留言:

張貼留言