題目是這樣的:
在幼兒園有n個小朋友排列為乙個隊伍,從左到右乙個挨著乙個編號為(0~n-1)。其中有一些是男生,有一些是女生,男生用'b'表示,女生用'g'表示。小朋友們都很頑皮,當乙個男生挨著的是女生的時候就會發生矛盾。作為幼兒園的老師,你需要讓男生挨著女生或者女生挨著男生的情況最少。你只能在原隊形上進行調整,每次調整只能讓相鄰的兩個小朋友交換位置,現在需要盡快完成隊伍調整,你需要計算出最少需要調整多少次可以讓上述情況最少。例如:ggbbg -> ggbgb -> gggbb,這樣就使之前的兩處男女相鄰變為一處相鄰,需要調整隊形2次。
輸入描述:
輸入資料報括乙個長度為n且只包含g和b的字串.n不超過50.
輸出描述:
輸出乙個整數,表示最少需要的調整隊伍的次數
輸入例子:
ggbbg
輸出例子:
2讓男生挨著女生或者女生挨著男生的情況最少,就是左邊全部是g右邊全部是b或者左邊全部是b右邊全部是g,這樣只需要在g全部調整到左邊和g全部調整到右邊兩種情況下取最小調整次數即可,故只用知道最初的位置以及調整完成最終的位置。若將g全部調整到左邊,則先計算g的所有下標之和sumg,以及調整後最終g的下標0,1,2,...numg-1的和,即(numg-1)*numg/2,兩者之差就是最小調整次數。同理,將g全部調整到右邊相當於將b全部調整到左邊,對b進行上述計算即可。
程式如下:
process.stdin.resume();//回覆輸入流
process.stdin.setencoding('utf8');
var input_stdin = "";//輸入的全部資料
var input_stdin_array = "";//輸入的每行資料以陣列形式存在
var input_currentline = 0;//輸入的行數
process.stdin.on('data', function (data)
});process.stdin.on('end', function () );
function readline()
function main()else
}//0到numg-1的和為(numg-1)*numg/2
min=math.min(sumg-(numg-1)*numg/2,sumb-(numb-1)*numb/2);
console.log(min);
}
網易2017春招筆試 調整隊形
題目 在幼兒園有n個小朋友排列為乙個隊伍,從左到右乙個挨著乙個編號為 0 n 1 其中有一些是男生,有一些是女生,男生用 b 表示,女生用 g 表示。小朋友們都很頑皮,當乙個男生挨著的是女生的時候就會發生矛盾。作為幼兒園的老師,你需要讓男生挨著女生或者女生挨著男生的情況最少。你只能在原隊形上進行調整...
演算法調整隊形
來自 2017 年網易春招筆試題三 在幼兒園有 n個小朋友排列為乙個隊伍,從左到右乙個挨著乙個編號為 0 n 1 其中有一些是男生,有一些是女生,男生用 b 表示,女生用 g 表示。小朋友們都很頑皮,當乙個男生挨著的是女生的時候就會發生矛盾。作為幼兒園的老師,你需要讓男生挨著女生或者女生挨著男生的情...
網易面試題 調整隊形
在幼兒園有n個小朋友排列為乙個隊伍,從左到右乙個挨著乙個編號為 0 n 1 其中有一些是男生,有一些是女生,男生用 b 表示,女生用 g 表示。小朋友們都很頑皮,當乙個男生挨著的是女生的時候就會發生矛盾。作為幼兒園的老師,你需要讓男生挨著女生或者女生挨著男生的情況最少。你只能在原隊形上進行調整,每次...