在幼兒園有n個小朋友排列為乙個隊伍,從左到右乙個挨著乙個編號為(0~n-1)。其中有一些是男生,有一些是女生,男生用』b』表示,女生用』g』表示。小朋友們都很頑皮,當乙個男生挨著的是女生的時候就會發生矛盾。作為幼兒園的老師,你需要讓男生挨著女生或者女生挨著男生的情況最少。你只能在原隊形上進行調整,每次調整只能讓相鄰的兩個小朋友交換位置,現在需要盡快完成隊伍調整,你需要計算出最少需要調整多少次可以讓上述情況最少。例如:
ggbbg -> ggbgb -> gggbb
這樣就使之前的兩處男女相鄰變為一處相鄰,需要調整隊形2次
輸入描述:
輸入資料報括乙個長度為n且只包含g和b的字串.n不超過50.輸出描述:
輸出乙個整數,表示最少需要的調整隊伍的次數輸入例子:
ggbbg輸出例子:
2解:最後矛盾最少的狀態只可能是男生和女生分別在兩邊,最多只有中間乙個男生挨著女生,所以總共有兩種方式:男生全部在座女生全部在右;女生全部在坐男生全部在右。
演算法:所以分兩種情況:把男生全部移到左邊;把女生全部移到左邊。再從兩個數中求乙個最小值即可。在移動的時候可以用乙個游標記錄一次需要移動的位置次數,這樣會簡化移動過程,不需要每次只能移動一步。
int adjustformation(const char * formation, int size)
else
}int minchangetimes, boymove, girlmove;
boymove = girlmove = 0;
int tempchangingtimes = 1;
//move boy
for (int i = 0; i < size; ++i) else
//no boys behind
if (tempchangingtimes + i >= size)
//change formation for tempchangingtimes
formboymove[i] = true;
formboymove[i+tempchangingtimes] = false;
boymove += tempchangingtimes;
//reset tempchangingtimes
tempchangingtimes = 1;}}
//reset tempchangingtimes
tempchangingtimes = 1;
//move girl
for (int i = 0; i < size; ++i) else
//no girls behind
if (tempchangingtimes + i >= size)
//change formation for tempchangingtimes
formgirlmove[i] = false;
formgirlmove[i+tempchangingtimes] = true;
girlmove += tempchangingtimes;
//reset tempchangingtimes
tempchangingtimes = 1;}}
minchangetimes = min(boymove, girlmove);
return minchangetimes;
}
//
// main.cpp
// adjustformation
//// created by jiajie zhuo on 2017/4/7.
//#include #define maxnumber 50
using namespace std;
int adjustformation(const char * formation, int size);
int main(int argc, const char * argv)
簡化問題的關鍵點即是用乙個游標記錄下乙個男生(女生)的的位置,這樣可以一次移動多步。
網易2017演算法題 調整隊形
題目是這樣的 在幼兒園有n個小朋友排列為乙個隊伍,從左到右乙個挨著乙個編號為 0 n 1 其中有一些是男生,有一些是女生,男生用 b 表示,女生用 g 表示。小朋友們都很頑皮,當乙個男生挨著的是女生的時候就會發生矛盾。作為幼兒園的老師,你需要讓男生挨著女生或者女生挨著男生的情況最少。你只能在原隊形上...
演算法調整隊形
來自 2017 年網易春招筆試題三 在幼兒園有 n個小朋友排列為乙個隊伍,從左到右乙個挨著乙個編號為 0 n 1 其中有一些是男生,有一些是女生,男生用 b 表示,女生用 g 表示。小朋友們都很頑皮,當乙個男生挨著的是女生的時候就會發生矛盾。作為幼兒園的老師,你需要讓男生挨著女生或者女生挨著男生的情...
網易2017春招筆試 調整隊形
題目 在幼兒園有n個小朋友排列為乙個隊伍,從左到右乙個挨著乙個編號為 0 n 1 其中有一些是男生,有一些是女生,男生用 b 表示,女生用 g 表示。小朋友們都很頑皮,當乙個男生挨著的是女生的時候就會發生矛盾。作為幼兒園的老師,你需要讓男生挨著女生或者女生挨著男生的情況最少。你只能在原隊形上進行調整...