有一款叫作空間迴廊的遊戲,遊戲中有着n個房間依次相連,如圖,1號房間能夠走到2號房間,以此類推,n號房間能夠走到1號房間。網站
這個遊戲的最終目的是爲了在這些房間中留下儘量多的烙印,在每一個房間裏留下烙印所花費的法力值是不相同的,已知他共有m點法力值,這些法力是不可恢復的。 ui
1.一開始小明位於1號房間。 2.若是他剩餘的法力能在當前的房間中留下一個烙印,那麼他就會堅決果斷的花費法力值。 3.不管是否留下了烙印,下一個時刻他都會進入下一個房間,若是當前位於i房間,則會進入i+1房間,若是在n號房間則會進入1號房間。 4.當重複通過某一個房間時,能夠再次留下烙印。spa
很顯然,這個遊戲是會終止的,即剩餘的法力值不能在任何房間留下烙印的時候,遊戲終止。請問他共能留下多少個烙印。code
輸入第一行有兩個正整數n和m,分別表明房間數量和小明擁有的法力值。(1<=n<=100000,1<=m<=10^18) 輸入第二行有n個正整數,分別表明1~n號房間留下烙印的法力值花費。(1<=a_i<=10^9)cdn
輸出僅包含一個整數,即最多能留下的烙印。blog
4 21 2 1 4 3遊戲
9ci
樣例解釋: 顯然是全部房間都留下兩個烙印,而後剩下1點法力值,僅能在2號房間再留下一個烙印.get
#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