題目:首先將**號碼中的每個數字加上8取個位,然後使用對應的大寫字母代替 ("zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"), 然後隨機打亂這些字母,所生成的字串即為**號碼對應的分身。現給你乙個**號碼的分身,求出分身前的最小**號碼(允許前導0)
輸入
4eight
zerotwoone
ohwetenrteo
ohewtiegthenrteo輸出0
234345
0345
思路:依次解碼具有獨一無二字元的數字,具有這樣特點的數字有五個分別是four(u),six(x),two(w),eight(g),zero(z),可以根據獨特字元的個數直接判斷有多少個相應的數字,例如有3個u那麼就一定有3個four...,解碼完成這五個數字之後另外的數字也會由於這些數字的移除而具有了獨一無二的字元。【**牛客網:
**一(用幾個陣列分別作為桶,儲存字母或數字的出現次數)
#include#include#include#includeusing namespace std;
int alph[26]; //字串中每個字母出現的個數
int numcnt[10]; //字串中每個數字出現的個數
string numword[10] = ;
//解碼順序和對應的關鍵字母
int keynum[10] = ;
char keyalph[10] = ;
//計算numcnt陣列
void decode() }}
int main()
}}
**二(與**差不多,區別是計數方式,用map儲存各字母的次數,然後依次計算各數字的次數)
while (t--)
vectorcount(10);
count[0] = help['z']; //zero
count[2] = help['w']; //two
count[4] = help['u']; //four
count[1] = help['o'] - count[0] - count[2] - count[4]; //one
count[6] = help['x']; //six
count[8] = help['g']; //eight
count[3] = help['t'] - count[2] - count[8]; //trhee
count[5] = help['f'] - count[4]; //five
count[7] = help['v'] - count[5]; //seven
count[9] = help['i'] - count[6] - count[5] - count[8]; //nine //nine
vectornumsbefore(10);
for (size_t i = 0; i<10; i++)
numsbefore[(i + 2) % 10] = count[i];//號碼還原
for (size_t i = 0; i<10; i++)
}
電話號碼分身
時間限制 1秒 空間限制 32768k 繼miui8推出手機分身功能之後,miui9計畫推出乙個 號碼分身的功能 首先將 號碼中的每個數字加上8取個位,然後使用對應的大寫字母代替 zero one two three four five six seven eight nine 然後隨機打亂這些字母...
電話號碼分身
繼miui8推出手機分身功能之後,miui9計畫推出乙個 號碼分身的功能 首先將 號碼中的每個數字加上8取個位,然後使用對應的大寫字母代替 zero one two three four five six seven eight nine 然後隨機打亂這些字母,所生成的字串即為 號碼對應的分身。第一...
電話號碼分身
題目描述 繼miui8推出手機分身功能之後,miui9計畫推出乙個 號碼分身的功能 首先將 號碼中的每個數字加上8取個位,然後使用對應的大寫字母代替 zero one two three four five six seven eight nine 然後隨機打亂這些字母,所生成的字串即為 號碼對應的...