我的程式碼如下,因為不想把陣列傳進func裡,但不知道要怎麼寫,所以就用了class把函式跟變數都包起來,感覺是個奇怪的寫法XD。
測資3 4的答案分別是2跟18,但我跑出來是3跟19,其他的測資都沒問題,是不是邊界的條件有問題呢? 還是有其他出錯的地方? 謝謝各位大神!
我的程式碼如下,因為不想把陣列傳進func裡,但不知道要怎麼寫,所以就用了class把函式跟變數都包起來,感覺是個奇怪的寫法XD。
測資3 4的答案分別是2跟18,但我跑出來是3跟19,其他的測資都沒問題,是不是邊界的條件有問題呢? 還是有其他出錯的地方? 謝謝各位大神!
#includeusing namespace std;class solution{public:solution(): current(0), numribbon(0){;}bool ifnotsuccess(){for(int i = 8 ; i >= 0 ; i--){if(num[i] > 0 && lenFlower[i] > length){cout << "NO SOLUTION!!" << endl;return true;}}return false;}void set(){cin >> length;for(int i = 0 ; i < 9 ; i++) cin >> num[i];countdown = 0;for(int i = 0; i < 9 ; i++) countdown += num[i];}int solu(){return recursion(current, numribbon, countdown);}int recursion(int current, int numribbon, int countdown){bool newribbon = true;for(int i = 8 ; i >= 0 ; i--){if(num[i] > 0){if(current >= lenFlower[i]){current -= lenFlower[i];num[i]--;newribbon = false;countdown--;break;}}}if(countdown == 0) return numribbon;
if(!newribbon) return recursion(current, numribbon, countdown);else return recursion(length, numribbon+1, countdown);};private:int length;int num[9];int lenFlower[9] = {8, 16, 24, 32, 40, 48, 56, 64, 80};int current;int countdown;int numribbon;};
int main(){
solution c;c.set();if(c.ifnotsuccess()) return 0;cout << c.solu() << endl;
return 0;}
這種寫法沒辦法讓緞帶最少吧
舉例,如果測資是
192
0 0 0 0 0 0 2 3 1
你的程式會輸出3