請不要直接抄寫程式碼! 也請不要直接跳到程式碼部分,除非你已經寫好了,想要參考別人的寫法!

第一題

  • 關於輸出數字間都空格,最後一個不空格,有很多種做法,這裡提供兩種:
    • 先輸出第一個數字,之後再接一個空格再一個數字
    cout<<"第一個數字";
    cout<<" "<<"接下來的數字";
    
    • 也可以先數字加空格,最後再加一個數
    cout<<"前面的數字"<<" ";
    cout<<"最後的數字";
    
  • 因為每一個大於等於 1 的整數,一定會有 1 這個因數,所以可以先印出 1
  • 如此一來,迴圈就只要從 2 開始判斷
  • 判斷到小於 number 就好(再看一次題目)
  • 當迴圈結束,再換行(注意排版!)

程式碼大概如下:

#include <iostream>
using namespace std;
int main()
{
    int number;
    while(cin>>number){
        cout<<"1";
        for (int i=2;i<number;i++)
            if (number%i==0)
                cout<<" "<<i;
        cout<<endl;
    }
}

第二題

  • 先拆解題目,分成階層跟取餘數
  • 階層定義為 0! = 1, n! = 1 x 2 x ... x n
  • 可以用迴圈做,並用一個變數儲存它(注意變數是否初始化,意思是應該要一開始就指派值)
  • 取餘數問題,根據維基百科 ab mod n = [(a mod n)*(b mod n)]mod n
  • 如果不清楚,就用數字舉例自己算算看!

程式碼大概如下:

#include <iostream>
using namespace std;
int main()
{
    int t;
    cin>>t;
    while(t>0){
        int n,m;
        cin>>n>>m;
        int result = 1;
        for(int i=1;i<=n;i++){
            result *= i%m;
            result %= m;
        }
        cout<<result%m<<endl;
        t--;
    }
}

第三題

  • 利用巢狀迴圈(迴圈裡面又一個迴圈)
  • 一個迴圈管列,一個管一個列中的每一個數
  • 觀察題目:
    • 第一列有 1 個數字、第二列有 2 個數字、第 n 列有 ? 個數字
    • 再來簡化題目,試著印出:
    1
    1 2
    1 2 3
    1 2 3 4
    
    • 最後再將上面的結果跟題目的要求比對看看之後,就是簡單的運算囉!

程式碼大概如下:

#include <iostream>
using namespace std;
int main()
{
    int n;
    cin>>n;
    for(int row=1;row<=n;row++){
        int number = row*2;
        cout<<number;
        for(int col=2;col<=row;col++){
            cout<<" "<<number + (col-1)*2;
        }
        cout<<endl;
    }
}

如果有任何問題,歡迎私訊跟我討論喔!