由打亂字母,找出最小電話號碼

2021-08-21 07:19:04 字數 2579 閱讀 8096

繼miui8推出手機分身功能之後,miui9計畫推出乙個**號碼分身的功能:首先將**號碼中的每個數字加上8取個位,然後使用對應的大寫字母代替 (」zero」, 「one」, 「two」, 「three」, 「four」, 「five」, 「six」, 「seven」, 「eight」, 「nine」), 然後隨機打亂這些字母,所生成的字串即為**號碼對應的分身。

第一行是乙個整數t(1 ≤ t ≤ 100)表示測試樣例數;接下來t行,每行給定乙個分身後的**號碼的分身(長度在3到10000之間)。

輸出t行,分別對應輸入中每行字串對應的分身前的最小**號碼(允許前導0)。

示例1

輸入

4

eight

zerotwoone

ohwetenrteo

ohewtiegthenrteo

輸出

0

234345

0345

要先依次解碼具有獨一無二字元的數字,具有這樣特點的數字有五個分別是four(u),six(x),two(w),eight(g),zero(z),可以根據獨特字元的個數直接判斷有多少個相應的數字,解碼完成這五個數字之後另外的數字也會由於這些數字的移除而具有了獨一無二的字元,這樣的數字有

three(h) - sum(8-eight)

five(f) -sum(4-four)

seven(s) -sum(6-six)

最後 one(o) - sum(0-zero) - sum(2-two) -sum(4-four)

nine(i) -sum(5-five) - sum(6-six) -sum(8-eight)

需要注意的是原始數字和最終出現的數字還有乙個轉換的過程(加8取個位數)

**:

#include 

#include

using

namespace

std;

int main()

; for(int i=0; iif(s[i] == 'z') b[0]++; // 0對應2

if(s[i] == 'o') b[1]++;

if(s[i] == 'w') b[2]++;

if(s[i] == 'h') b[3]++;

if(s[i] == 'u') b[4]++;

if(s[i] == 'f') b[5]++;

if(s[i] == 'x') b[6]++;

if(s[i] == 's') b[7]++;

if(s[i] == 'g') b[8]++;

if(s[i] == 'i') b[9]++;

}b[1] = b[1] - b[0] - b[2] - b[4];//1對應3

b[3] = b[3] - b[8];//3對應5

b[5] = b[5] - b[4];//5對應7

b[7] = b[7] - b[6];//7對應9

b[9] = b[9] - b[8] - b[5]- b[6];//9對應1

while(b[8]--)

while(b[9]--)

while(b[0]--)

while(b[1]--)

while(b[2]--)

while(b[3]--)

while(b[4]--)

while(b[5]--)

while(b[6]--)

while(b[7]--)

cout

<< endl;

}return

0;}

輸出優化

#include 

#include

using

namespace

std;

int main()

; for(int i=0; iif(s[i] == 'z') b[0]++; // 0對應2

if(s[i] == 'o') b[1]++;

if(s[i] == 'w') b[2]++;

if(s[i] == 'h') b[3]++;

if(s[i] == 'u') b[4]++;

if(s[i] == 'f') b[5]++;

if(s[i] == 'x') b[6]++;

if(s[i] == 's') b[7]++;

if(s[i] == 'g') b[8]++;

if(s[i] == 'i') b[9]++;

}b[1] = b[1] - b[0] - b[2] - b[4];//1對應3

b[3] = b[3] - b[8];//3對應5

b[5] = b[5] - b[4];//5對應7

b[7] = b[7] - b[6];//7對應9

b[9] = b[9] - b[8] - b[5]- b[6];//9對應1

for(int i=0; i<10; i++)

}cout

<< endl;

}return

0;}

電話號碼的字母組合

給乙個數字字串,每個數字代表乙個字母,請返回其所有可能的字母組合。下圖的手機按鍵圖,就表示了每個數字可以代表的字母。樣例給定 23 返回 ad ae af bd be bf cd ce cf 注意以上的答案是按照詞典編撰順序進行輸出的,不過,在做本題時,你也可以任意選擇你喜歡的輸出順序。class ...

電話號碼的字母組合

給定乙個僅包含數字2 9的字串,返回所有它能表示的字母組合。給出數字到字母的對映關係如下 示例 輸入 23 輸出 ad ae af bd be bf cd ce cf 注 輸出字串順序任意 我的 public class lettercombinationsofaphonenumber public...

C 電話號碼轉對應字母

2對應abc,3對應def,4對應ghi,5對應jkl,6對應mno,7對應prs,8對應tuv,9對應wxzy 現輸入乙個七位數的 號碼 範圍在2 9 輸出數字對應字母的全部排列。include include includeusing namespace std string word 10 i...