字节跳动2019春招研发部分编程题汇总
一:萬萬沒想到之聰明的編輯
題目描述
給定一個字符串,按照要求修改字符串,輸出最后的結果 1. 三個同樣的字母連在一起,一定是拼寫錯誤,去掉一個的就好啦:比如 helllo -> hello 2. 兩對一樣的字母(AABB型)連在一起,一定是拼寫錯誤,去掉第二對的一個字母就好啦:比如 helloo -> hello 3. 上面的規則優先“從左到右”匹配,即如果是AABBCC,雖然AABB和BBCC都是錯誤拼寫,應該優先考慮修復AABB,結果為AABCC樣例
輸入例子1: 2 helloo wooooooow輸出例子1: hello woow思路:
????遍歷字符串,遇到符合修改條件的就進行修改,這里的問題在于如何動態的維護字符串,暴力解法就是刪除完以后刷新一遍字符串, 著很明顯是超時的,
????這里用j去來存新的字符串, j為下標, 遍歷原字符串, 每次遍歷都把該字符存到新的字符串的最后一位, 如何判斷新的字符串是否滿足可以刪除的條件, 如果滿足, 進行刪除
代碼
代碼二
#include <iostream> #include <cstring> #include <vector> using namespace std; char s[1010];int main() {int n;cin >> n;while(n--){cin >> s;int len = strlen(s);for(int i = 0; i < len; i++){while(i >= 2 && s[i] == s[i - 1] && s[i] == s[i - 2]){for(int k = i - 1; k < len - 1; k++)s[k] = s[k + 1];len--; s[len] = '\0';}while(i >= 3 && s[i] == s[i - 1] && s[i - 3] == s[i - 2]){for(int k = i - 1; k < len - 1; k++)s[k] = s[k + 1];len--; s[len] = '\0';}}cout << s << endl;}return 0; }二:萬萬沒想到之抓捕孔連順
題目描述
給定n個數字以及最大距離d, 從中選擇3個數, 每兩個數字間的大小差距不能超過給定的d 求復合要求的方案數, ans對99997867取模樣例
輸入例子1: 4 3 1 2 3 4輸出例子1: 4例子說明1: 可選方案 (1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4)輸入例子2: 5 19 1 10 20 30 50輸出例子2: 1例子說明2: 可選方案 (1, 10, 20)思路:
????對于已知的數字串(1, 2, 3)如果加入一個數字4,那么新加的方案數就是在前面的3個數字中選出兩個數字的方案數,這時我們就只需要找到前面符合要求的數字是多少個就是了
????題目中有兩個隱藏條件,給定的數字是升序的并且無重復,所以這里我們只需要用到雙指針的思路,遍歷數組(i), 用一個j指向前面的最小滿足的數字的下標即可, 這時我們需要的滿足要求的數字個數就是(i - j)。
注意 由于沒有給出數據范圍, 我們需要動態開辟空間。
代碼
#include <iostream> #include <cstring>using namespace std; const int N = 10010, mod = 99997867;typedef long long ll;ll get_sum(ll n) {return (n - 1) * n / 2; //n個數中選出2個 }int main() {ll n, d, ans;cin >> n >> d;ll a[n];ans = 0;for(int i = 0, j = 0; i < n; i++){cin >> a[i];while(i >= 2 && (a[i] - a[j]) > d) j++; //找到前面滿足條件的jans += get_sum(i - j); //i - j是j前面滿足要求的位置的數量 ans %= mod; }cout << ans << endl;return 0;}六:找零 (貪心)
題目描述
Z國的貨幣系統包含面值1元、4元、16元、64元共計4種硬幣,以及面值1024元的紙幣。 現在小Y使用1024元的紙幣購買了一件價值為n的商品,請問最少他會收到多少硬幣?樣例
輸入例子1: 200輸出例子1: 17例子說明1: 花200,需要找零824塊,找12個64元硬幣,3個16元硬幣,2個4元硬幣即可。思路
????每次優先找大的面額的硬幣
代碼
#include <iostream> #include <cstring>using namespace std;int get_ans(int num) {int ans = 0;int money = 64;for(int i = 0; i < 4; i++){ans += num / money;num %= money;money >>= 2; } return ans; } int main() {int n;cin >> n;cout << get_ans(1024 - n) <<endl;return 0;}七:機器人跳躍問題
題目描述
機器人正在玩一個古老的基于DOS的游戲。游戲中有N+1座建筑——從0到N編號,從左到右排列。編號為0的建筑高度為0個單位,編號為i的建筑的高度為H(i)個單位。 起初, 機器人在編號為0的建筑處。每一步,它跳到下一個(右邊)建筑。假設機器人在第k個建筑,且它現在的能量值是E, 下一步它將跳到第個k+1建筑。 它將會得到或者失去正比于與H(k+1)與E之差的能量。如果 H(k+1) > E 那么機器人就失去 H(k+1) - E 的能量值,否則它將得到 E - H(k+1) 的能量值。游戲目標是到達第個N建筑,在這個過程中,能量值不能為負數個單位。現在的問題是機器人以多少能量值開始游戲,才可以保證成功完成游戲?樣例
輸入例子1: 5 3 4 3 2 4輸出例子1: 4輸入例子2: 3 4 4 4輸出例子2: 4思路
????根據題目條件我們可以得到這樣一個式子, E(k) +(E(k) - H(k + 1)) = E(k + 1), 變形可以得到E(k) = (E(k + 1) + H(k + 1)) / 2, 由于要求我們得到最小的開始能量, 就是最后結束時能量為0, 我們逆推回去就可以得到開始的能量, 注意逆推過程中能量要向上取整。
代碼
#include <iostream> #include <cstring> #include <vector> #include <cmath>using namespace std;int n; vector<int> a;int main() {cin >> n;for(int i = 0; i < n; i++){int t;cin >> t;a.push_back(t);}int ans = 0;for(int i = a.size() - 1; i >= 0; i--){ans = ceil((double)(ans + a[i]) / 2);}cout << ans << endl;return 0;}五:畢業旅行問題
題目描述
????小明目前在做一份畢業旅行的規劃。打算從北京出發,分別去若干個城市,然后再回到北京,每個城市之間均乘坐高鐵,且每個城市只去一次。由于經費有限,希望能夠通過合理的路線安排盡可能的省一些路上的花銷。給定一組城市和每對城市之間的火車票的價錢,找到每個城市只訪問一次并返回起點的最小車費花銷。
樣例
輸入例子1: 4 0 2 6 5 2 0 4 4 6 4 0 2 5 4 2 0輸出例子1: 13代碼
#include <iostream> #include <cstring> #include <vector> using namespace std;int n; int e[25][25];int main() {while(cin >> n){memset(e, 0, sizeof e);int x;for(int i = 0; i < n; i++){for(int j = 0; j < n; j++)cin >> e[i][j];}int f[1 << n][n];memset(f, 0x3f, sizeof f);int inf = f[0][0];//i是一個二進制形式的數,表示經過城市的集合,如0111表示經過了城市0,1,2//j是以j結尾 f[1][0] = 0;//在0這個城市原地 花費是0for(int i = 1; i < 1 << n; i++){for(int j = 0; j < n; j++){if(f[i][j] != inf) //已經訪問過了 因為下面是用f[i][j]去更新f[i+(1<<k)][k]的 {for(int k = 0; k < n; k++){if(((i >> k) & 1) == 0 ) // 等于0 說明沒有訪問過k {f[i | (1 << k)][k] = min(f[i | (1 << k)][k], f[i][j] + e[j][k]); } }}} }int ans = inf;for(int i = 1; i < n; i++){ans = min(ans, f[(1 << n) - 1][i] + e[i][0]); } cout << ans <<endl;}return 0; }總結
以上是生活随笔為你收集整理的字节跳动2019春招研发部分编程题汇总的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 教你玩转九四玩手游联运系统
- 下一篇: PCL-MAL 聚己内酯马来酰亚胺