爱奇艺笔试题之成长值计算
題意如下:
成長值計算
時間限制:C/C++語言 1000MS;其他語言 3000MS
內存限制:C/C++語言 65536KB;其他語言 589824KB
題目描述:
愛奇藝累計有2000萬會員,為了提高會員權益以及減少運營成本,我們需要對用戶分等級差異化運營,為此我們制定了用戶成長體系,按成長值(最小為0)劃分為不同等級。成長值計算公式為:
會員成長值=每天成長值+任務成長值
現(xiàn)在我們輸入一組數(shù)據(jù),表示用戶的成長值計算規(guī)則,比如某個用戶的每天成長值規(guī)則1 1 5 10,第一列1表示每日成長值規(guī)則,第二列1表示該條規(guī)則的生效開始時間,第三列5表示該條規(guī)則的生效截至時間,第四列10表示該條規(guī)則的每天成長值,則用戶初始值為0,第1天到第5天,每天成長值10點,則第5天成長值為50;另外任務成長值規(guī)則,比如2 3 4,第一列2表示該規(guī)則為任務成長值,第二列3表示第三天做任務,第三列4表示該天做任務得到成長值4。現(xiàn)在輸入一組數(shù)據(jù),每行一條成長規(guī)則,每日成長規(guī)則生效時間重合時以成長數(shù)值最大的為準,每日成長值是每天0點更新,任務成長值是0點以后,要求計算成長值規(guī)則對應最后一天成長值。
輸入
輸入數(shù)據(jù)有多行,第一列為1時,該行會有4個數(shù)值,第一列為2時,該列會有3個數(shù)值
輸出
對于每個測試實例,初始成長值都為0,計算成長值規(guī)則最后一天的用戶成長值。
樣例輸入
1 1 5 10
2 3 4
1 4 6 -5
樣例輸出
49
解決該問題可以用最直接的思路,首先將每條規(guī)則存下來,然后從最小天數(shù)開始到最大天數(shù)依次得到下一個要計算的區(qū)間,例如樣例中,首先是1-5,每天成長值為10(因為第一條規(guī)則第五天的成長值大于第三條,所以第五天的成長值按照第一條規(guī)則來計算),下一條規(guī)則是5-6,每天成長值為 -5,最后再加上任務的成長值可以得到最總結果為49.
以上思路可以解決問題,但是總體解決思路比較亂,需要考慮的情況有很多,因為有可能很多條規(guī)則都有重復,這時候需要遍歷這些規(guī)則找到最合適下一條規(guī)則。
還有另一種思路,即將成長區(qū)間轉化為每天的成長,化整為零,這樣思路就簡單了很多。具體操作如下:
首先將每條規(guī)則都讀取進來,并且在讀取的時候就確定開始時間與結束時間,然后聲明一個數(shù)組,大小為總的天數(shù),數(shù)組中每個元素代表該天的成長值。然后再遍歷每條規(guī)則,將該規(guī)則的成長值寫入到該數(shù)組中,當然,每天的成長值都取最大的那個成長值。最后,將該數(shù)組求和即可。
具體代碼如下:
總結
以上是生活随笔為你收集整理的爱奇艺笔试题之成长值计算的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html5新增的标签是什么,HTML5新
- 下一篇: BMP图片加马赛克C语言C++超简单