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

世界中の大手IT企業とのインタビューで、求職者が遭遇する新しい質問とタスクを取り上げました。



KDPV



タスクは、非常に単純なものからさまざまな難易度で選択されます。 しかし、それらのすべてが一見したところ明らかな解決策を持っているわけではありません。その解決策はあなたの脳を良好な状態に保つのに役立ち、誰かがインタビューで混乱しないようにするのに役立ちます。



ご質問



  1. 黒と白のボール

    袋に20個の白いボールと13個の黒いボールがあります。 2つのボールを次々と引き出します。 ボールが同じ色の場合は、白いボールに置き換えます。ただし、異なる色の場合は、黒いボールに置き換えます。 いったんボールを取り出したら、それらをバッグに戻さないでください。ボールは減り続けます。 バッグに残っている最後のボールの色は何ですか?


    翻訳
    バッグには20個の白いボールと13個の黒いボールがあります。 一度に2つのボールを引きます。 それらが同じ色である場合-そしてそれらが異なる色である場合、それらを白いボールで置き換えます-あなたはそれらを黒いボールで置き換えます。 ボールはバッグに戻されないため、ボールの数はそこで減少します。 バッグに残っている最後のボールの色は何ですか?



  2. 卵を数える

    毎日私の家に卵を届ける男は、いつかは現れませんでした。 それで彼が翌朝来たとき、私は彼に説明を求めた。 彼は私に次の話をしました:

    昨日の朝、彼は頭から卵がいっぱい入ったバスケットを持って家を出て、毎日のラウンドを開始し、通りに足を踏み入れました。 しかし、ドライバーは徹底した紳士であり、彼の責任を認め、損害賠償を申し出た。 しかし、行商人は自分が持っていた卵の正確な数を思い出せませんでしたが、50から100の間の数を推定しました。また、紳士に、卵が一度に2と3 、しかし、一度に5個ずつ数えた場合、3個が残り、彼は卵を1個10セントで売りました。 紳士はいくつかの簡単な計算を行い、行商人に十分な支払いをしました。

    紳士は卵にいくら払ったのですか?


    翻訳
    かつて私に毎日新鮮な卵を持ってきてくれる行商人は来ませんでした。 彼は翌日現れ、私は彼の不在の理由を説明するように彼に頼んだ。 彼は次の話をしました:

    前日の夜、彼は卵がいっぱい入ったバスケットを持って家を出て、通りを歩き回っていました。 彼の隣で、車が全速力で急いでバスケットに触れたため、すべての卵が割られました。 しかし、ドライバーは紳士であることが判明し、損害賠償を支払うことを申し出ました。 行商人は、バスケットにある卵の正確な数を思い出すことができませんでした。50〜100個しかありませんでした。 3個の卵が残っていました。 彼は卵を1個10セントで販売しました。 運転手はすぐに心の中で数え、行商人に壊れた卵の正確な量を与えました。 彼はいくら払った?





タスク



  1. 行ごとにソートされた行列の中央値を見つける

    サイズr * cの行ごとに並べ替えられた行列が与えられます。与えられた行列の中央値を見つける必要があります。 r * cは常に奇数であると想定されています。



    例:



    入力:

    1 3 5

    2 6 9

    3 6 9

    出力:中央値は5

    すべての値をソートされた配列に入れると、A [] = 1 2 3 3 5 6 6 9 9



    入力:

    1 3 4

    2 5 6

    7 8 9

    出力:中央値は5



    翻訳
    行ごとに要素が並べ替えられた行列を使用して、サイズr * c。 マトリックスの中央値を見つける必要があります。 r * cは常に奇数であると想定されています。





    ログイン:

    1 3 5

    2 6 9

    3 6 9

    終了:中央値-5

    ソートされた配列として:A [] = 1 2 3 3 5 6 6 9 9



    入力:

    1 3 4

    2 5 6

    7 8 9

    出力:中央値-5



  2. 最小の1桁の式

    数値Nと数字Dが与えられた場合、Dのみを含む式または方程式を作成する必要があり、その式はNに評価されます。式で使用できる演算子は+、-、*、および/です。 上記の条件を満たす最小の長さの式を見つけます。Dは式に最大10(制限)回しか表示できません。



    例:



    入力:N = 7、D = 3

    出力:3/3 + 3 + 3

    説明:3/3 = 1、および1 + 3 + 3 = 7

    これは最小の式です。



    入力:N = 7、D = 4

    出力:(4 + 4 + 4)/ 4 + 4

    説明:(4 + 4 + 4)= 12、および12/4 = 3および3 + 4 = 7

    また、これは最小の式です。 でも

    別の表現が見つかるかもしれませんが

    式には5つの4のみを含めることができます



    入力:N = 200、D = 9

    出力:式が見つかりません!

    説明:10桁以内では不可能です。



    翻訳
    数字Nと数字Dが与えられます。Nを生成し、Dのみを含む式を作成する必要があります。操作+、-、*、/は有効です。 式でDが10回までしか発生しないという事実を考慮して、条件を満たす最小長の式を見つける必要があります。



    入力:N = 7、D = 3

    出力:3/3 + 3 + 3

    説明:3/3 = 1、および1 + 3 + 3 = 7



    入力:N = 7、D = 4

    結論:(4 + 4 + 4)/ 4 + 4

    説明:(4 + 4 + 4)= 12、および12/4 = 3および3 + 4 = 7



    入力:N = 200、D = 9

    結論:式が見つかりません!

    説明:10桁の制限で実行できません。



    注:3番目の例はチャレンジのように見えます。



  3. それらをすべてまとめるための最小スワップ

    n個の正の整数の配列と数値kが与えられます。 k以下のすべての数をまとめるのに必要なスワップの最小数を見つけます。



    入力:arr [] = {2、1、5、6、3}、k = 3

    出力:1



    説明:

    要素2、1、3をまとめるには、要素「5」を「3」に交換して、最終的な配列を次のようにします。

    arr [] = {2、1、3、6、5}



    入力:arr [] = {2、7、9、5、8、7、4}、k = 5

    出力:2



    翻訳
    n個の正の整数の配列と数kが与えられます。 近くのk以下のすべての要素を収集するために必要な順列の数を見つけます。



    入力:arr [] = {2、1、5、6、3}、k = 3

    出力:1



    説明

    5箇所と3箇所を交換するだけで十分です。

    arr [] = {2、1、3、6、5}



    入力:arr [] = {2、7、9、5、8、7、4}、k = 5

    出力:2





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



解決策



  1. 質問1
    黒いボールが残っているはずです、答えは正しく見つかりました



  2. 質問2
    運転手は78個の卵の代金を支払ったが、正しい解決策はコメントで見つかった。



  3. タスク1
    簡単なアプローチは、すべての行列要素を並べ替えられた配列に入れ、中央値を見つけることです。 時間と場所の難しさ-O(r * c)。



    効果的な解決策は、バイナリ検索を使用することです。 アイデアは、中央値の前に正確にn / 2個の数字があるはずであり、それより少ないので、解決策がコメントで提案されました。



    元のソリューション:



    // C++ program to find median of a matrix // sorted row wise #include<bits/stdc++.h> using namespace std; const int MAX = 100; // function to find median in the matrix int binaryMedian(int m[][MAX], int r ,int c) { int min = INT_MAX, max = INT_MIN; for (int i=0; i<r; i++) { // Finding the minimum element if (m[i][0] < min) min = m[i][0]; // Finding the maximum element if (m[i][c-1] > max) max = m[i][c-1]; } int desired = (r * c + 1) / 2; while (min < max) { int mid = min + (max - min) / 2; int place = 0; // Find count of elements smaller than mid for (int i = 0; i < r; ++i) place += upper_bound(m[i], m[i]+c, mid) - m[i]; if (place < desired) min = mid + 1; else max = mid; } return min; } // driver program to check above functions int main() { int r = 3, c = 3; int m[][MAX]= { {1,3,5}, {2,6,9}, {3,6,9} }; cout << "Median is " << binaryMedian(m, r, c) << endl; return 0; }
          
          







  4. タスク2
    コメントするオプション



  5. タスク3
    コメントするオプション






All Articles