1. 程式人生 > 實用技巧 >ECNU 3529 梵高先生

ECNU 3529 梵高先生

ECNU 3529 梵高先生

連結

https://acm.ecnu.edu.cn/problem/3529/

題目

單點時限: 1.0 sec

記憶體限制: 256 MB

誰的父親死了
請你告訴我如何悲傷
誰的愛人走了
請你告訴我如何遺忘
——李志《梵高先生》

2009年的最後一天 在義烏隔壁酒吧 李志為了還做唱片欠下來的20W 巡迴35場演出 在這晚完成 喝醉了的逼哥哽咽著唱完梵高先生 說最後一次唱這歌。他粗魯的打斷了大家的合唱,然後用最沙啞的嗓音唱了起來,哪天,唯一和他合音的只有一隻狗。

抬頭再看了一眼星空和黑夜,今晚的星星變成了一個三角形的樣子,像這樣:

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
...
現在給你一個正整數n,請你給出星空的前n行。

輸入格式
輸入檔案共一行,包含一個正整數n(1<=n<=20)。

輸出格式
輸出檔案共n行,即星空的前n行。每行包含若干正整數,這些正整數之間用一個空格隔開(不能有多餘的空格),最後一個正整數後面沒有空格。

樣例
input
4
output
1
1 1
1 2 1
1 3 3 1

思路

開新坑了,ECNU,華東師大的OJ,這是第一道題,是個水題,一堆文字描述略去,是個楊輝三角。
如果打算要更快,直接打表,因為輸入只要求到20,這裡還是以學習為重,用常規思路。
先建立陣列,從答案中可以發現,左側和右側都是1,中間的數字都是上面兩個數字的和,這裡用遞迴即可,需要考慮的是要注意輸出格式,套一個if即可。此類題目就是,每一行都與上一行有特定關係,只需要注意到關係,並保證資料格式即可。

程式碼

  public static void fun() {
    int n;
    Scanner sc = new Scanner(System.in);
    n = sc.nextInt();
    int[][] a = new int[n][n + 1];
    for (int i = 0; i < n; i++) {
      a[i][0] = 1;
      a[i][i] = 1;
    }
    for (int i = 2; i < n; i++) {
      for (int j = 1; j < i; j++) {
        a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
      }
    }
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < i + 1; j++) {
        System.out.print(a[i][j]);
        if (j != i) {
          System.out.print(" ");
        }
      }
      if (i != n - 1) {
        System.out.println();
      }
    }
  }