C++_內聯函數 帶默認形參值的函數 重載函數 constexpr 取整 點燈

/*
NO.1 內聯函數
(1)內聯函數是在“編譯時”將函數體嵌入在每一個調用處,相當於宏定義define
(2)inline關鍵字只是表示一個要求,編譯器並不承諾將inline修飾的函數作爲內聯
(3)在現代編譯器中,沒有用inline修飾的函數也可能被編譯爲內聯
(4)內聯函數應該是比較簡單的函數,結構簡單,語句少,頻繁調用
(5)帶有遞歸調用或者循環的函數不能以內聯方式處理
*/

/*
NO.2 帶默認形參值的函數
    注:在默認形參值的右面不能有非默認形參值的參數
舉個栗子,糖炒的:
int add(int x, int y = 0) 正確
int add(int x = 0, int y) 錯誤
*/

/*
NO.3 重載函數
(1)函數名相同
(2)形參必須不同:個數不同或者類型不同
(3)編譯器不以形參名來區分函數,也不以返回值來區分函數
舉個栗子,還是糖炒的
(1)int add(int x, int y); double add(double x, double y);
(2)int add(int x, int y); int add(int x, int y, int z);
(3)int add(int x, int y); void add(int a, int b); ->錯誤
*/

/*
NO.4 constexpr
變量
(1)constexpr修飾的變量必須用常量或者常量表達式來初始化
(2)到目前爲止,算數類型、指針、引用都可以定義爲constexpr自定義類,string等不可以
函數
(1)constexpr修飾的函數在其所有參數都是constexpr時,一定返回constexpr
(2)函數體中有且只有一條return語句
*/
浮點型取整:

double強制轉換int,向下取整
floor(),向下取整
ceil(),向上取整
round(),四捨五入取整

點燈問題

題目描述:有n盞燈,編號依次爲1,2,3,…,n;初始化時,所有燈都是關閉狀態;小明第一次將編號爲1,2,3,…,共n盞燈都打開了;第二次將編號爲2,4,6,…,共n/2盞燈都關閉了;第三次將編號爲3,6,9,…,共n/3盞燈進行操作,若是之前關閉狀態則打開,若是打開狀態,則關閉;第四次將4,8,12,…,共n/4盞燈進行操作。這樣操作了n次,問最後亮了幾盞燈。 

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
    int T; cin >> T;
    while(T -- )
    {
        int n; cin >> n;
        cout << (int)sqrt(n) << endl;
        //只有完全平方數的因子有奇數個(因爲平方根*平方根=完全平方數)
        //對燈操作奇數次最終纔是亮的
        //所以答案爲n取平方向下取整
    }
    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章