1. 程式人生 > >網易2018筆試程式設計題1——最少安裝路燈數

網易2018筆試程式設計題1——最少安裝路燈數

網易筆試第一題,思考了一會兒把自己給繞進去了,想明白了不難

分兩種情況討論:

        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;
}