---
# System prepended metadata

title: Java_Cmoney_st207
tags: [Cmoney_Java題目]

---

---
tags: Cmoney_Java題目
---
Java_Cmoney_st207
===

![](https://i.imgur.com/q4LtG7z.png)



1.需要的 function
---
這種數列叫外觀數列，解答是[參考](https://leetcode.com/problems/count-and-say/discuss/16040/Straightforward-Java-Solution)
想法是做兩個 function
1. 輸入字串，產生下一個字串的樣子
2. 迴圈，因為每一個字串都可以從上1個推


1.1 產生下一個在外觀數列的字串
---
例如
輸入 1 1 會輸出 2 1
輸入 2 1 會輸出 1 2 1 1
1. 首先建立 StringBuilder 方便串接字串
2. 建立 int count 紀錄這個數字出現幾次，因為一定有出現過所以設為1
3. 建立 char c 紀錄輸入進來的字串 s 的第一個字元，由左到右製作下個字串
4. 迴圈，由左到右讀取字元，並記錄次數
5. 如果遇到和第一個字元相同的就 count++
6. 否則輸出結果，串接記錄到幾個(count)，串接是幾個數字( c )
   此外在更換 c 成第 i 個的字元，還有 count = 1，
   因為算第 i 個的數量，進入下一個迴圈
7. 假如是最後一組，不論是不一樣的(例如 2 1)，或一樣的例如(1 2 1 1)，跳出迴圈後，要把最後一組也輸出，串接記錄到幾個(count)，串接是幾個數字( c )
8. 回傳時，要轉回String
```java=
public static String ci(String s) {
        StringBuilder sb = new StringBuilder();
        int count = 1;
        char c = s.charAt(0);
        for (int i = 1; i < s.length(); i++) {
            if(s.charAt(i) == c)
                count++;
            else{
                sb.append(count);
                sb.append(c);
                c = s.charAt(i);
                count = 1;
            }
        }
        sb.append(count);
        sb.append(c);
        return sb.toString();
    }
```


1.2 使用上個函數的迴圈
---
外觀數列第1個是 1 ，所以第二圈是 1 1 ，第三圈 2 1 ，以此類推

```java=
 public static String cas(int n) {
        String s = "1";
        for (int i = 1; i < n; i++) {
            s = ci(s);
        }
        return s;
    }

```


2.主程式
---
只要輸入要看第幾個外觀數列就好

```java=
public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println(cas(sc.nextInt()));
    }
```

3.完整程式
---
```java=
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println(cas(sc.nextInt()));

    }

    public static String cas(int n) {
        String s = "1";
        for (int i = 1; i < n; i++) {
            s = ci(s);
        }
        return s;
    }

    public static String ci(String s) {
        StringBuilder sb = new StringBuilder();
        int count = 1;
        char c = s.charAt(0);
        for (int i = 1; i < s.length(); i++) {
            if(s.charAt(i) == c)
                count++;
            else{
                sb.append(count);
                sb.append(c);
                c = s.charAt(i);
                count = 1;
            }
        }
        sb.append(count);
        sb.append(c);
        return sb.toString();
    }
}


```