美團筆試——空間迴廊(c++) 🎯空間迴廊

⭐ 孟應傑的網站: www.mengyingjie.com ⭐

🎯空間迴廊

📌題目描述:

有一款叫做空間迴廊的遊戲,遊戲中有着n個房間依次相連,如圖,1號房間可以走到2號房間,以此類推,n號房間可以走到1號房間。

這個遊戲的最終目的是爲了在這些房間中留下儘可能多的烙印,在每個房間裏留下烙印所花費的法力值是不相同的,已知他共有m點法力值,這些法力是不可恢復的。



小明剛接觸這款遊戲,所以只會耿直的玩,所以他的每一個行動都是可以預料的:

1.一開始小明位於1號房間。
2.如果他剩餘的法力能在當前的房間中留下一個烙印,那麼他就會毫不猶豫的花費法力值。
3.無論是否留下了烙印,下一個時刻他都會進入下一個房間,如果當前位於i房間,則會進入i+1房間,如果在n號房間則會進入1號房間。
4.當重複經過某一個房間時,可以再次留下烙印。

很顯然,這個遊戲是會終止的,即剩餘的法力值不能在任何房間留下烙印的時候,遊戲終止。請問他共能留下多少個烙印。

輸入

輸入第一行有兩個正整數n和m,分別代表房間數量和小明擁有的法力值。(1<=n<=100000,1<=m<=10^18)
輸入第二行有n個正整數,分別代表1~n號房間留下烙印的法力值花費。(1<=a_i<=10^9)

輸出

輸出僅包含一個整數,即最多能留下的烙印。

樣例輸入

4 21
2 1 4 3

樣例輸出

9

提示

樣例解釋:
顯然是所有房間都留下兩個烙印,然後剩下1點法力值,僅能在2號房間再留下一個烙印.

⌨代碼實現

#include<iostream>
using namespace std;

int main(){
    //輸入房間數量m,小明擁有的法力值n
    int n, m;
    cin >> n >> m;
    //輸入每個房間消耗的法力值
    int arr[n];
    for(int i = 0; i < n; i++){
        cin >> arr[i];
    }
    //定義兩個變量,cnt用來計數,記錄留下的烙印數
    //sign,爲設立的標誌,當小明在一圈中消耗過法力值,標誌位置爲1,
    //如果一圈下來sign=0,那麼代表這一圈小明沒有消耗法力值,那麼就可以結束循環了。
    int cnt = 0;
    int sign = 0;
    //循環開始,因爲不知道要循環多少遍,所以中間參數爲空
    for(int i = 0;  ; i++ ){
        //如果法力值大於當前格子的法力值
        if( m >= arr[i]){
            m = m - arr[i]; //法力值減去當前格子的法力值
            cnt++;          //烙印數+1
            sign = 1;       //本圈消耗了法力值,sign=1
        }
        //當i = n - 1,說明一次循環結束,如果sign=1,則需要進行下一輪循環
        //那麼就把sign歸0,有因爲結束時會有i++,所以i=0-1,那麼就開啓新一輪循環
        if((i == n - 1) && (sign == 1)){
            sign = 0;
            i = 0-1;
        }
        //當i = n - 1,循環結束,sign=0,則不需要繼續循環,直接跳出死循環。
        else if((i == n - 1) && (sign == 0)){
            break;
        }
    }
    cout << cnt << endl;
    return 0;

}

遇到此類問題,但看了文章還是未解決,
評論或加 QQ:781378815

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