網易2018筆試程式設計題1——最少安裝路燈數
阿新 • • 發佈:2018-12-31
網易筆試第一題,思考了一會兒把自己給繞進去了,想明白了不難
分兩種情況討論:
1、<=3的情況,有需要被照亮的地方則安裝1個路燈即可
2、>3的情況,從第二個格子開始遍歷(i=1),去尋找需要被照亮的格子(這裡看當前格子的前一個格子i=0是否需要被照亮),如果i=0需要被照亮,並且i=0的格子沒有被照亮,在當期位置放置路燈,同時照亮i-1、i、i+1三個格子,如果不需要被照亮,則i++即可。程式碼分享,大家可以討論
#include <iostream> #include <cstring> #include <cstdio> #include <cstdlib> using namespace std; void Calcul() { const int MAXLENTH = 1000; int n; char str[MAXLENTH]; int sum=0,light[MAXLENTH+1] = {0}; cin>>n; cin>>str; if(n<=3) { for(int i=0;i<n;i++) if('.' == str[i]) { cout<<1<<endl; return; } cout<<0<<endl; return; } for(int i=1;i<n;i++) { if('.' == str[i-1] && 0 == light[i-1]) { sum++; light[i-1] = 1; light[i] = 1; light[i+1] = 1; } } if('.' == str[n-1] && 0 == light[n-1]) sum++; cout<<sum<<endl; return; } int main() { /**網易第一題*/ int k; cin>>k; for(int i=0;i<k;i++) Calcul(); return 0; }