一個工作中的問題

需求如下:

用戶在前臺界面輸入若干個專業編號S和人數N,後臺根據下述規則返回給前臺N個專家。每個專家在數據庫中都存有其基礎信息,其中包含專業編號(以逗號隔開的字符串)、等級(高中低)、資質是否有效(Y|N)等信息。

規則:

1.每個專家擁有的專業編號都至少對應S中的一個
2.N個專家所包含的所有專業編號要包含S中的任意一個
3.N個專家中至少有一個等級是高級,且低級佔比不超過40%
4.N個專家中資質無效的佔比不超過50%

思路:

1.首先根據規則 1 來查找數據庫中的所有專家,得到專家集合 M1,使得M1中任意一個專家的專家編號都至少有一個屬於S;
2.根據所需人數N,計算出所有從M1中取N個的所有可能的情況R。循環R次,每次循環都對從M1中取出的N個專家進行專業判斷,若這N個專家所含專業編號集合>S,則添加到集合M2中;
3. M2中的任意一個元素(N個專家的集合)都滿足規則2;
4.對M2進行遍歷,每次循環都對M2每個元素中的所有專家的等級、資質是否有效進行計算,如果計算出的滿足條件3、4,則表明此次循環的元素符合所有條件,添加到M3中;
5.對M3隨機取一條即爲結果。

進一步需求

用戶看到推薦的專家組後,希望對某個專家進行置換,更換後的結果仍然滿足所有規則。用戶更換過的專家不會被再次更換出來。

思路:
1.每次點擊置換按鈕,都把該組專家的所有Id和要被更換的這個專家的Id傳到後臺,更換的專家的Id使用靜態成員變量臨時存儲(更換池),且在用戶第一次點擊搜索得到結果後進行清空處理,在每次點擊置換按鈕後對該靜態變量進行添加的操作;
2.將上述M3作爲靜態成員變量處理,遍歷M3,根據另外N-1個不被操作的專家的Id篩選每次循環中包含這N-1個專家的元素,將其添加到M4中;
3.將M4與更換池中的專家Id對比,將不在更換池中的專家作爲集合M5;
4.任取M5中的一條。

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