1. 程式人生 > >博客05--查找

博客05--查找

數量 集中 exist 申請 map對象 指向 cas 類型 搜索樹

1.學習總結(2分)

1.1查找的思維導圖

各種查找的時間復雜度,ASL成功,不成功。都要體現。

1.2 查找學習體會

談談你對查找算法學習體會。也可以談談STL容器中查找如何用的。

2.PTA實驗作業(4分)

2.1 題目1:6-3 二叉搜索樹中的最近公共祖先

2.2 設計思路

int LCA( Tree T,  int u, int v ){
    定義 Tree類型變量 BST ,BSV,分別存放u,v在樹的節點
    BST等於BSV等於T
    while BST不等於 NULL 遍歷BST
        若找不到u
            return 錯誤
    如果找到了u
        while (BST不等於NULL)遍歷 BST
        若找不到v
            return 錯誤
    如果找到了,對公共祖先的情況進行判斷
    遍歷T
        如果u和v都小於根節點 
            T指向左孩子
        如果u和v都大於根節點
            T指向右孩子
        如果根節點等於u
            返回 公共祖先u
        如果根節點等於v
            返回 公共祖先v
        如果 v和u分布在 根節點兩側
            返回 公共祖先 根節點的值
    end遍歷
    如果 T==NULL
        return 錯誤;

}

2.3 代碼截圖

技術分享圖片
技術分享圖片
技術分享圖片

2.4 PTA提交列表說明。

技術分享圖片
部分正確:

  • 一開始的想法是找到u和v在樹的節點位置,然後向根節點遍歷直到找到第一個相同的節點就是它們的公共祖先,但是操作難度有點大,就先用6-1 二叉搜索樹的操作集中的查找函數先把u和v找出來提交了就有了部分正確..
  • 後來是在網上找思路的時候,看到了這樣的思路,就按照這個思路自己寫了
    技術分享圖片

2.1 題目2:7-1 QQ帳戶的申請與登陸

2.2 設計思路


map定義一個用string 作為索引,並擁有相關聯的指向string的指針 qq
定義整型變量 n,i;分別存放用戶總數和循環變量
定義字符型變量 c 存放操作類型L or N
定義字符串型變量 user,pw 分別存放用戶賬號和密碼

輸入人數
for i=0 to i=N;共N次
    輸入操作類型
    輸入 用戶和密碼
    通過map對象的方法獲取的iterator數據類型it
    it 等於在qq裏尋找 user 的結果
    switch (操作類型)
        case L:{
        如果  賬戶不存在
            輸出 "ERROR: Not Exist" 
        如果 賬戶存在 但是 密碼錯誤
            輸出"ERROR: Wrong PW"
        其他
            輸出"Login: OK"
        }break;
        case N:{
            如果  用戶已經存在
                輸出 "ERROR: Exist"
            其他
                qq[user]等於pw;
                輸出 OK
        }break;

2.3 代碼截圖

技術分享圖片

2.4 PTA提交列表說明。

技術分享圖片
1多種錯誤:.

  • 一開始用函數的方法做這道題目,思路如下,多次提交記錄不行是因為有些循環變量沒有初始化等等的問題,後來過了題目sample的測試點,但是由於使用了太多的循環導致下面的兩個測試點直接段錯誤,這時候問同學的時候提示說要用容器,確實相對之前的代碼量,使用容器十分的清楚便捷。
    技術分享圖片
定義全局變量人數num=0;
主函數:
    輸入人數及操作類型lon
    輸入 用戶賬號acc和密碼word
    swich(lon):{
            case ‘L‘:函數Local(acc,word);break; 
            case ‘N‘:函數New(acc,word);break;
}

void Local(char acc[],char word[]){//老用戶登錄
    如果 人數為0
        輸出 ERROR: Not Exis
    否則
        for i=0 to i等於用戶人數 ,共num次
            while 遍歷賬號數組
                如果 某位賬號不符合 
                    break;
            end while
            如果全部配對
                while遍歷密碼數組
                    如果 某位密碼不配對
                        break;
                end while
            如果配對成功
                輸出Login: OK 並結束
            否則 
                輸出"ERROR: Wrong PW 並結束

        end for
}

void New(char acc[],char word[]){//新用戶申請
        如果人數等於 0
            直接錄入
        否則 
            與之前的所有賬號對比
            如果有配對成功的
                輸出 ERROR: Exist
            否則
                錄入新紀錄
        人數 num加一

}

2.1 題目3:7-2 航空公司VIP客戶查詢

2.2 設計思路

int main(){
定義整型變量 i 做循環變量
    N,M 存放用戶數量
    K 存放官方最小裏程
    trip 存放用戶裏程
定義long long類型變量 id,ID,分別存放,記錄時身份證的前17位,查詢時身份證的前17位
定義字符型變量 c 存放身份證最後一位校驗碼
map定義一個用long long 作為索引,並擁有相關聯的指向int的指針 record.

    輸入 N,K;
    for i=0 to i=N 共N次
    {       輸入要錄入的 id和c,還有裏程數trip;
        如果 trip 小於最小裏程
            則 trip 等於 最小裏程
        通過map對象的方法獲取的iterator數據類型it
        it 等於 在record裏尋找 id的結果
        如果 找不到
            record[id]等於 用戶裏程數
        找到則
            該用戶的裏程數 加 trip          
    }end for;
    輸入 M;//查詢部分
    for i=0 to i=M,共M次
    {       輸入查詢的ID 和c
        通過map對象的方法獲取的iterator數據類型it 
        it 等於 在record裏尋找 id的結果
        如果 找不到
            輸出 "No Info\n"
        找到則
            輸出該會員裏程數
    }end for;
return 0;
}

2.3 代碼截圖

技術分享圖片

2.4 PTA提交列表說明。

技術分享圖片

運行超時:.

  • 1.懷疑變量類型長度不夠 ,所以試著將int類型的N,M,K換成long 類型----運行超時!
  • 2.然後換成long long -----運行超時!
  • 3.後來問同學,說是使用cin,cout的時間比scanf,printf 的時間長,所以整型的變量的輸入都換成了scanf,輸出都換成 printf,但是字符串id還是用 cin--------運行超時!
  • 4.最後把id分成了long long類型變量id前十七位數字和最後一位校驗碼字符型c,用scanf("%lld%c%d\n",&id,&c,&trip);輸入會員賬號和裏程數-----成功!.

3.截圖本周題目集的PTA最後排名

(201721123002)
技術分享圖片

3.1 PTA排名:4名

3.2 我的得分:2.5分(145分)

4. 閱讀代碼(必做,1分)

5. 代碼Git提交記錄截圖

技術分享圖片

技術分享圖片

博客05--查找