7-5 汽车加油问题 (20 分)(思路+详解)Come 宝!!!!!!!!!!!!!
生活随笔
收集整理的這篇文章主要介紹了
7-5 汽车加油问题 (20 分)(思路+详解)Come 宝!!!!!!!!!!!!!
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一:題目
題目來源:王曉東《算法設計與分析》
一輛汽車加滿油后可行駛 n公里。旅途中有若干個加油站。設計一個有效算法,指出應 在哪些加油站停靠加油,使沿途加油次數最少。
輸入格式:
第一行有 2 個正整數n和 k(k<=1000 ),表示汽車加滿油后可行駛n公里,且旅途中有 k個加油站。 第二行有 k+1 個整數,表示第 k 個加油站與第k-1 個加油站之間的距離。 第 0 個加油站表示出發地,汽車已加滿油。 第 k+1 個加油站表示目的地。
輸出格式:
輸出最少加油次數。如果無法到達目的地,則輸出“No Solution!”。
輸入樣例:
7 7 1 2 3 4 5 1 6 6輸出樣例:
4二:思路
思路:1.將這段路程的最大值跟 n進行比較 如果比其大就直接輸出 No Solution!
2.否則的話就是每段路程在加滿油的情況下均能過去
3.如果可以過去,那么當路程m小于n時,對n進行更新 n = n-m;然后在進行判斷下一段路程
跟n的關系,如果m大于n那么就加油,同時進行計數
三:上碼
/**思路:1.將這段路程的最大值跟 n進行比較 如果比其大就直接輸出 No Solution! 2.否則的話就是每段路程在加滿油的情況下均能過去3.如果可以過去,那么當路程m小于n時,對n進行更新 n = n-m;然后在進行判斷下一段路程跟n的關系,如果m大于n那么就加油,同時進行計數 */ #include<bits/stdc++.h> using namespace std;int n,k; int res(vector<int>& v,int val){int maxx = 0,cnt = 0;for(int i = 0; i < v.size(); i++){maxx = max(maxx,v[i]);}if(maxx > n){return -1;}for(int i = 0; i < v.size(); i++){if(n >= v[i]){n = n - v[i];}else{n = val;n = n - v[i];cnt++;//cout << n << ' ';} // cout << v[i] << ' ';}return cnt;}int main(){vector<int>v;cin >> n >> k;for(int i = 0; i < k+1; i++){int num;cin >> num;v.push_back(num);}int temp = res(v,n);if(temp == -1){cout << "No Solution!";}else{// cout << endl;cout << temp;}}
又得嘮叨一句 記得加油 寶!!!!!!!!!!!!!!!!
總結
以上是生活随笔為你收集整理的7-5 汽车加油问题 (20 分)(思路+详解)Come 宝!!!!!!!!!!!!!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 足疗多久做一次,长期足疗的坏处
- 下一篇: 7-1 活动选择问题 (25 分)(思路