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

私たちは、世界中のさまざまなIT企業でのインタビューから興味深いタスクや質問を公開し続けています。



KDPV

今回は、シマンテックの将来のソフトウェアエンジニアへの質問が含まれています。 5月の祝日を見越して、選択したタスクは最も難しいものではありませんが、ある程度の検討が必要です。 また、インタビュー中に出会った興味深い質問やタスクをコメント欄に記入してください。



ご質問



  1. 偽造コイン

    箱にはn個のコインが含まれており、そのうち7個は両側に尾を持つ偽造品で、残りは公正な硬貨です。 バッグからコインを1枚選んで投げた場合、尾を引く確率は17/20です。 「n」の値を見つけます。


    翻訳
    箱にはn個のコインがあり、そのうち7個は偽造品です。両側に尾があり、残りのコインは正しいです。 箱からコインを選択して投げた場合、テールが落ちる可能性は17/20です。 nを見つけます。



  2. 利用できない最大の番号

    マクドナルドでは、6.9と20のボックスでチキンマクナゲットを注文できます。上記の組み合わせを使用して注文できないナゲットの最大数はいくつですか。


    翻訳
    マクドナルドでは、6個、9個、および20個入りの箱でチキンナゲットを注文できます。 これらのボックスを組み合わせて注文できないナゲットの最大数は何ですか、

    ご注意 いいえ、広告料は支払われていません:)





タスク



  1. すべての組み合わせを見つける

    文字のセットと正の整数kが与えられると、与えられたセットから形成できる1からkまでの長さのすべての可能な文字列を印刷します。



    例:



    入力:

    セット[] = {'a'、 'b'}、k = 3



    出力:

    a

    b

    ああ

    ab

    ba

    bb

    aaa

    aab

    あば

    アッブ

    ばぁ

    バブ

    BBA

    bbb



    入力:

    set [] = {'a'、 'b'、 'c'、 'd'}、k = 1

    出力:

    a

    b

    c

    d



    翻訳
    文字セットと正の数kが与えられます。 このセットから取得できる長さ1〜kのすべての可能な文字列の組み合わせを出力します。



    例:



    ログイン:

    セット[] = {'a'、 'b'}、k = 3



    出力:

    a

    b

    ああ

    ab

    ba

    bb

    aaa

    aab

    あば

    アッブ

    ばぁ

    バブ

    BBA

    bbb



    ログイン:

    set [] = {'a'、 'b'、 'c'、 'd'}、k = 1

    出力:

    a

    b

    c

    d



  2. 単一リンクリストのノードを削除する

    単一リンクリストで削除するノードへのポインタを指定して、ノードを削除します。 ヘッドノードへのポインターがないことに注意してください。 タスクを実行するためのプログラムを作成すると、擬似コードが受け入れられます。


    翻訳
    単一リンクリストの要素へのポインタを指定すると、この要素を削除する必要があります。 head要素へのポインタは指定されていないことに注意してください。 タスクを実行するプログラムを作成します。擬似コードは受け入れられます。



  3. コメントリムーバー

    指定されたC / C ++コードからコメントを削除するプログラムを作成します。


    翻訳
    C / C ++コードからコメントを削除するプログラムを作成します。



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



解決策



  1. 質問1
    正解は10で、これはすぐに計算されました。



  2. 質問2
    43.最初のコメントで正解が与えられ、このスレッドの議論で説明されました。



  3. タスク1
    ソリューションオプション:

    // C# program to print all // possible strings of length k using System; class GFG { // The method that prints all // possible strings of length k. // It is mainly a wrapper over // recursive function printAllKLengthRec() static void printAllKLength(char[] set, int k) { int n = set.Length; for (int j=0; j<=k; j++) { printAllKLengthRec(set, "", n, j); } } // The main recursive method // to print all possible // strings of length k static void printAllKLengthRec(char[] set, String prefix, int n, int k) { // Base case: k is 0, // print prefix if (k == 0) { Console.WriteLine(prefix); return; } // One by one add all characters // from set and recursively // call for k equals to k-1 for (int i = 0; i < n; ++i) { // Next character of input added String newPrefix = prefix + set[i]; // k is decreased, because // we have added a new character printAllKLengthRec(set, newPrefix, n, k - 1); } } // Driver Code static public void Main () { Console.WriteLine("First Test"); char[] set1 = {'a', 'b'}; int k = 3; printAllKLength(set1, k); Console.WriteLine("\nSecond Test"); char[] set2 = {'a', 'b', 'c', 'd'}; k = 1; printAllKLength(set2, k); } }
          
          







  4. タスク2
    ソリューションへの正しいアプローチは、このコメントで Andy_Uによって提案されました。 コード:

     #include<stdio.h> #include<assert.h> #include<stdlib.h> /* Link list node */ struct Node { int data; struct Node* next; }; /* Given a reference (pointer to pointer) to the head of a list and an int, push a new node on the front of the list. */ void push(struct Node** head_ref, int new_data) { /* allocate node */ struct Node* new_node = (struct Node*) malloc(sizeof(struct Node)); /* put in the data */ new_node->data = new_data; /* link the old list off the new node */ new_node->next = (*head_ref); /* move the head to point to the new node */ (*head_ref) = new_node; } void printList(struct Node *head) { struct Node *temp = head; while(temp != NULL) { printf("%d ", temp->data); temp = temp->next; } } void deleteNode(struct Node *node_ptr) { struct Node *temp = node_ptr->next; node_ptr->data = temp->data; node_ptr->next = temp->next; free(temp); } /* Drier program to test above function*/ int main() { /* Start with the empty list */ struct Node* head = NULL; /* Use push() to construct below list 1->12->1->4->1 */ push(&head, 1); push(&head, 4); push(&head, 1); push(&head, 12); push(&head, 1); printf("Before deleting \n"); printList(head); /* I m deleting the head itself. You can check for more cases */ deleteNode(head); printf("\nAfter deleting \n"); printList(head); getchar(); return 0; }
          
          







  5. タスク3
    ソリューションオプション:

     // C++ program to remove comments from a C/C++ program #include <iostream> using namespace std; string removeComments(string prgm) { int n = prgm.length(); string res; // Flags to indicate that single line and multpile line comments // have started or not. bool s_cmt = false; bool m_cmt = false; // Traverse the given program for (int i=0; i<n; i++) { // If single line comment flag is on, then check for end of it if (s_cmt == true && prgm[i] == '\n') s_cmt = false; // If multiple line comment is on, then check for end of it else if (m_cmt == true && prgm[i] == '*' && prgm[i+1] == '/') m_cmt = false, i++; // If this character is in a comment, ignore it else if (s_cmt || m_cmt) continue; // Check for beginning of comments and set the approproate flags else if (prgm[i] == '/' && prgm[i+1] == '/') s_cmt = true, i++; else if (prgm[i] == '/' && prgm[i+1] == '*') m_cmt = true, i++; // If current character is a non-comment character, append it to res else res += prgm[i]; } return res; } // Driver program to test above functions int main() { string prgm = " /* Test program */ \n" " int main() \n" " { \n" " // variable declaration \n" " int a, b, c; \n" " /* This is a test \n" " multiline \n" " comment for \n" " testing */ \n" " a = b + c; \n" " } \n"; cout << "Given Program \n"; cout << prgm << endl; cout << " Modified Program "; cout << removeComments(prgm); return 0; }
          
          










All Articles