華為機試之好友管理

2021-07-04 20:59:52 字數 2143 閱讀 6738

問題描述:現有乙個社交**,其好友推薦策略為:使用者a

和使用者b

不是好友,當二人的共同好友數量超過好友推薦閾值

m時,就向a和

b分別推薦為彼此好友。

本題任務為:

對設定的

m值,給定一組使用者及各自好友列表,對這一組使用者,反覆自動應用上述好友推薦策略後(假設每次推薦都被採納),求指定使用者的最終好友列表。

注:好友關係是雙向的,即:如果使用者

a是使用者

b的好友,那麼使用者

b一定也是使用者

a的好友。

寫乙個程式,在社交網路中實現: 1

)初始化社交網路 2

)建立使用者 3

)增加指定兩個使用者之間的好友關係 4

)反覆自動應用好友推薦策略後,獲取某個使用者的好友數量 5

)反覆自動應用好友推薦策略後,判斷某兩個使用者間是否存在好友關係

說明:

1、乙個使用者有且只有乙個名字,且不存在重名 2

、自己和自己不存在好友關係 3

、使用者名字大小寫敏感 4

、使用者名字字串長度範圍為

[1..20]

5、使用者總數小於100個

輸入:

五個整數,

好友推薦閾值p

,建立使用者數量m,

增加指定兩個使用者之間的好友關係數量m,查詢

某個使用者的好友數量n,查詢指定兩個使用者是否是好友n

字串,每個資料一行,按到上面的順序依次輸入資料,共m+m+n+n行字串

字串,每個一行,共m+m+n+n行字串

輸出:輸出使用者的好友數量,共n個,每個一行;如果使用者不存在,輸出-1,否則輸出好友數量。樣例中的使用者jack、peter、tom的好友數量都是2個。

輸出指定兩個使用者是否是好友,共n個,每個一行,如果是輸出0,否則輸出-1。樣例中的使用者jack與peter、peter與tom、jack與tom都是好友關係,所有輸出0。

樣例:2 3 3 3 3 //好友推薦閾值2,使用者數量為3,增加知道兩個使用者之間的好友關係數量m,

//查詢某個使用者的好友數量3,查詢指定兩個使用者是否是好友n字串

jack 

peter 

tom //輸入了三個使用者

jack peter 

peter tom 

jack tom //增加了三個好友關係

jack

peter 

tom //查詢了這三個使用者的好友數量

jack peter 

peter tom 

jack tom //查詢了這三個好友關係是否存在

樣例輸出:

2 //jack幾個好友,這裡就用到了閾值2 //peter幾個好友2 0 //jack peter是否好友0 //peter tom是否好友0 //jack tom
看了別人的**,主要想法是雜湊表的使用以及好友矩陣表。將名字字串轉化到int空間,然後使用好友矩陣表進行分析。特別注意:當有新的好友對產生時要繼續進行迴圈

#include#include#includeusing namespace std;

const int maxn =1010;

bool mp[maxn][maxn]; //mp[i][j]表示第i個人和第j個人是不是朋友

int num[maxn]; //num[i]表示第i個人有多少個好友

int main()

for(i = 0;i>str1>>str2;

mp[id[str1]][id[str2]]=mp[id[str2]][id[str1]]=1;

}//標記好友矩陣

bool flag = 1; //標記是否會有新的好友對產生

int count; //共同好友的個數

while(flag)

//有新的好友對產生,需要再次處理

}} //統計每個人的好友數

for(i = 0;i>str1;

cout<>str1>>str2;

if(mp[id[str1]][id[str2]])

cout<

else

cout<

} }system("pause");

return 0;

}

華為機試整理

include stdafx.h includeusing namespace std int main int argc,tchar argv cout 2.大數相加 用stl的string比較方便,如下,自己測了幾組資料沒有什麼問題。include stdafx.h include includ...

華為機試 2013

1.字串轉換 問題描述 將輸入的字串 字串僅包含小寫字母 a 到 z 按照如下規則,迴圈轉換後輸出 a b,b c,y z,z a 若輸入的字串連續出現兩個字母相同時,後乙個字母需要連續轉換2次。例如 aa 轉換為 bc,zz 轉換為 ab 當連續相同字母超過兩個時,第三個出現的字母按第一次出現算。...

華為機試3

明明想在學校中請一些同學一起做一項問卷調查,為了實驗的客觀性,他先用計算機生成了n個1到1000之間的隨機整數 n 1000 對於其中重複的數字,只保留乙個,把其餘相同的數去掉,不同的數對應著不同的學生的學號。然後再把這些數從小到大排序,按照排好的順序去找同學做調查。請你協助明明完成 去重 與 排序...