問題#21:ITトレーニング-主要企業の現在の問題と課題

ITトレーニングの次号が到着しました。これは、大手IT企業でのインタビューに提供されるタスクです。

KDPV

この選択には、Facebookからのタスクと質問が含まれており、開発者として仕事に就きたいと考えている人に質問します。 従来は、単純なタスクとそうでないタスクの両方が選択されていました。 自分で問題を解決することをお勧めします。通常、回答セクションに元のソリューションへのリンクを追加します。

ご質問


  1. 自由な場所
    100人乗りの飛行機に乗る人が並んで待っています。 ハリーは、行の最初の人です。 ハリーは飛行機に乗りますが、座席番号を忘れたため、ランダムに座席を選びます。 その後、飛行機に乗る各人は、空いている場合は割り当てられた座席に座ります。それ以外の場合は、空いている座席をランダムに選択して座ります。 フライトは満席で、最後に並んでいます。 割り当てられた座席に座る確率はどのくらいですか?

    翻訳
    乗客は100席の旅客機に搭乗することを期待しています。 ハリーは最初の行です。 彼が飛行機に乗るとき、彼は彼が彼の座席番号を忘れたことに気づくので、彼はランダムな場所で席に着く。 彼の後に来る乗客は、チケットに従って自分の場所を取り始めますが、自分の場所が奪われたことがわかると、彼らはランダムな場所に座ります。 飛行機がいっぱいで、あなたが最後に入場します。 あなたが所定の位置に落ちる可能性は何ですか?

  2. 2つの砂時計
    4分の砂時計と7分の砂時計から9分を測定します。

    翻訳
    4時間と7分間、2つの砂時計で9分を測定します。


タスク


  1. ワードブーグル
    辞書、辞書内のルックアップを行う方法、およびすべてのセルに1つの文字が含まれるM x Nボード。 隣接する文字のシーケンスによって形成される可能性のあるすべての単語を検索します。 8つの隣接する文字のいずれかに移動できますが、1つの単語に同じセルの複数のインスタンスを含めることはできません。

    例:

    入力:辞書[] = {"HABR"、 "FOR"、 "QUIZ"、 "GO"};

    boggle [] [] = {{'H'、 'I'、 'Z'}、
    {'U'、 'A'、 'R'}、
    {'Q'、 'N'、 'B'}};

    isWord(str):辞書にstrが存在する場合にtrueを返します
    そうでない場合は偽。

    出力:次の辞書の単語が存在します
    ハブラ
    クイズ




    翻訳
    指定:辞書。 辞書検索方法とMxNマトリックス。各セルには1文字が含まれます。 隣接するマトリックス文字から順番に収集できる辞書からすべての可能な単語を見つけます。 8つの隣接セルのいずれかに移動できますが、1つの単語に同じセルを2回含めることはできません。

    例:

    入力:辞書[] = {"HABR"、 "FOR"、 "QUIZ"、 "GO"};

    boggle [] [] = {{'H'、 'I'、 'Z'}、
    {'U'、 'A'、 'R'}、
    {'Q'、 'N'、 'B'}};

    isWord(str):単語strが辞書にある場合はtrueを返し、そうでない場合はfalseを返します。

    出力:次の単語が辞書に存在します。
    ハブラ
    クイズ



  2. FBI デコードする方法
    AZからの手紙を含む最高機密メッセージは、次のマッピングを使用して数字にエンコードされています。

    'A'-> 1
    'B'-> 2
    ...
    'Z'-> 26

    あなたはFBIエージェントです。 メッセージをデコードできる方法の総数を決定する必要があります。
    注:空の数字シーケンスは、1つのデコードがあると見なされます。 入力には0から9までの有効な数字が含まれていると想定される場合があります。

    例:
    エンコードされたメッセージ「123」が与えられると、「ABC」(1 2 3)または「LC」(12 3)または「AW」(1 23)としてデコードできます。
    合計ウェイは3です。


    翻訳
    文字A〜Zで構成される秘密のメッセージは、次の対応を使用して数値表記でエンコードされます。

    'A'-> 1
    'B'-> 2
    ...
    'Z'-> 26

    あなたはFBI ILVのエージェントです。 このメッセージの復号化オプションの数を決定する必要があります。 注:空の数値シーケンスには1つのオプションがあると見なされます。 入力文字列の正しいシーケンスは0〜9であると想定されています。 先行0または追加の後続0があり、さらに2つ以上の繰り返し0がある場合、そのような行は正しくありません。

    例:
    暗号化されたメッセージは「123」で、「ABC」(1 2 3)または「LC」(12 3)または「AW」(1 23)として復号化できます。
    回答:3。


  3. 複数の文字列
    刺し傷s1とs2として2つの数字が与えられた場合、あなたの仕事はそれらを掛けることです。 2つの文字列s1とs2を唯一の引数として受け取り、その積を文字列として返す関数multipleStringsを完了する必要があります。

    制約:
    1 <= s1およびs2の長さ<= 100

    入力:s1 = 4154
    s2 = 51454
    出力:213779916

    入力:s1 = 654154154151454545415415454
    s2 = 63516561563156316545145146514654
    出力:41549622603955309777243716069997997007620439937711509062916

    翻訳
    文字列s1とs2の形式の2つの数値が与えられた場合、あなたの仕事はこれらの数値を乗算することです。 2つの文字列引数(s1とs2)のみを取り、その結果を結果として返すmultiplyStrings関数を作成する必要があります。

    制限事項:
    1 <=長さs1およびs2 <= 100

    例:
    入力:s1 = 4154
    s2 = 51454
    出力:213779916

    入力:s1 = 654154154151454545415415454
    s2 = 63516561563156316545145146514654
    出力:41549622603955309777243716069997997007620439937711509062916

回答は来週以内に行われます-決定する時間があります。 頑張って

解決策


  1. 質問1
    50%の確率。 コメントでは、これは、たとえばthisで徹底的に議論されています。

  2. 質問2
    正解は最初のコメントにあります。

  3. タスク1
    元のソリューション:
    // C++ program for Boggle game #include<iostream> #include<cstring> using namespace std; #define M 3 #define N 3 // Let the given dictionary be following string dictionary[] = {"HABR", "FOR", "QUIZ", "GO"}; int n = sizeof(dictionary)/sizeof(dictionary[0]); // A given function to check if a given string is present in // dictionary. The implementation is naive for simplicity. As // per the question dictionary is given to us. bool isWord(string &str) { // Linearly search all words for (int i=0; i<n; i++) if (str.compare(dictionary[i]) == 0) return true; return false; } // A recursive function to print all words present on boggle void findWordsUtil(char boggle[M][N], bool visited[M][N], int i, int j, string &str) { // Mark current cell as visited and append current character // to str visited[i][j] = true; str = str + boggle[i][j]; // If str is present in dictionary, then print it if (isWord(str)) cout << str << endl; // Traverse 8 adjacent cells of boggle[i][j] for (int row=i-1; row<=i+1 && row<M; row++) for (int col=j-1; col<=j+1 && col<N; col++) if (row>=0 && col>=0 && !visited[row][col]) findWordsUtil(boggle,visited, row, col, str); // Erase current character from string and mark visited // of current cell as false str.erase(str.length()-1); visited[i][j] = false; } // Prints all words present in dictionary. void findWords(char boggle[M][N]) { // Mark all characters as not visited bool visited[M][N] = {{false}}; // Initialize current string string str = ""; // Consider every character and look for all words // starting with this character for (int i=0; i<M; i++) for (int j=0; j<N; j++) findWordsUtil(boggle, visited, i, j, str); } // Driver program to test above function int main() { char boggle[M][N] = {{'H','I','Z'}, {'U','A','R'}, {'Q','N','B'}}; cout << "Following words of dictionary are present\n"; findWords(boggle); return 0; } 


  4. タスク2
    jspython 、goの推奨ソリューション。

  5. タスク3
    「列による乗算」を使用して、ビットごとに数値を乗算し、次の桁に転送することで解決できます。 ソリューションオプション

Source: https://habr.com/ru/post/J358064/


All Articles