應該沒有很難....吧

前兩堂課的實作!

我想在這裡預祝我們學妹班排獲勝

structure

  • 自定義型別

Struct 

struct 名字a{
    //你所需要的型別
    //ex
    int ineed;
    char uhu;
}變數名稱; //;很重要!

int main(){
    名字a 變數名稱;
    //呼叫
    變數名稱.ineed;
    變數名稱.uhu;
}

structure

題目說明:

輸入一個n代表接下來會有幾個字串

請判斷以下幾個句子內出現了哪些字母,分別出現幾次,並以出現次數排列,若次數一致則按照字母順序排列

  • 因字串內包含" "故請以getliine輸入
  • 其他太複雜了等等講

題目來源:

structure

//宣告
int n;
int c[26];//各字母出現次數
string s;

//歸0
memset(c,0,sizeof(c));//將陣列c從0歸零至26(陣列的大小)

structure

//輸入與計算字母出現次數
cin>>n;
cin.ignore();//忽略輸入n後的換行
for(int i=0;i<n;i++){
    getline(cin,s);//持續輸入直到換行
    for(int j=0,len=s.length();j<len;j++){
        if(isalpha(s[j])){
            c[toupper(s[j])-'A']++;
        }
    }
}

語法補充: isalpha(x)判斷其是否為字元

                     toupper(x)將字元由小寫轉為大寫

structure

//利用struct統計字元的ascii碼與出現次數
struct node{
    int ascii;
    int count;
}Node[26];

structure

//將有出現過的字母以及次數存入Node[]

int k=0; //紀錄總共出現了幾個不同的字元
for(int i=0;i<26;i++){
    if(c[i]>0){ //如果那個字元有出現過則執行
        Node[k].ascii=i+'A';
        Node[k].count=c[i];
        k++;
    }
}

structure

//將Node[]裡的資料排序

sort(Node,Node+k,com);
//排序無法排序自訂意函式的陣列,故需要自定義排列方法

//排列方法

bool com(node a, node b){
    if(a.count == b.count) return b.ascii > a.ascii;
    else return a.count > b.count;
}

遞迴

  • 將函式放進函式裡

遞迴

型別 函式名稱(放入資料的型別 放入函式的名稱 //用逗點隔開){
    //函式內容
    return 函式名稱(欲放入的內容);
}

遞迴

題目說明:

每次輸入一個整數N,輸入次數不限

當N為0則跳出

f91的規則為下:

若N>100則回傳N-10

若N<=100則回傳f91(f91(N+11))

並請輸出N所對應之值為和

  • 輸入次數不限故請用while(cin>>)
  • 應其條件所需設一個函式

題目來源:

遞迴

主函式內容

int main(){
    int in;
    while(cin>>in){
        if(in==0) break;
        cout<<f91(in)<<endl;
    }
    return 0;
}

遞迴

f91函式

int f91(int n){
    if(n>100){
        return n-10;
    }
    else{
        return f91(f91(n+11));
    }
}

二分搜

  • 將資料由小到大排列
  • 從資料的中間開始找

二分搜

3 5 12 14 23 25 39 42 49 53

if find 53

二分搜

題目說明:

有一個公會總共有N個成員,每個有不同編號,並按照順序排列,接下來會問Q次,請查出其詢問之編號是否在此工會內

題目來源:

  • 數值範圍有點大,記得用long long

二分搜

//預設mid=n/2

if(num[mid]<find){
    left=mid+1;
}
else if(num[mid]>find){
    right=mid-1;
}
mid=(right+left)/2;
//藉由左右端點改變mid的值

利用改變左端點與右端點的找到是否有該值

Made with Slides.com