![KDPV](https://habrastorage.org/webt/dy/is/pu/dyispuv_iv86inxi36s3rwat3ne.png)
選択には、設計エンジニアとしてのインタビューで求められたタスクが含まれていました。 単純なものからさまざまな難易度レベルのタスク。 手を試して問題を自分で解決しようとすることをお勧めします。インタビューでの質問に驚かされることはほとんどありません。
ご質問
- 2種類の錠剤
男性は2種類のピルを服用する必要がある病状を持っているため、AとBと呼ばれます。男性は毎日1錠ずつA錠剤、B錠1錠を摂取する必要があります。 丸薬は、最初に水に溶かして服用します。
男はAの薬の瓶とBの薬の瓶を持っています。 ある日、彼はピルを服用しようとしているので、彼はAジャーから1つのAピルを取り出し、コップ1杯の水に入れます。 それから彼は誤ってBジャーから2つのBピルを取り出し、それらを水に入れます。 今、彼は3つの溶解したピル、1つのAピルと2つのBピルが入ったコップ1杯の水を飲んでいる状況にあります。 残念ながら、丸薬は非常に高価なので、3つの丸薬で水を捨てて最初からやり直すという考えは問題外です。 ピルを無駄にせずに適切な量のAとBを得るために、男性はどのように進むべきですか?
翻訳医学的適応によると、1人の患者はAとBの2種類の薬を服用する必要があり、1錠Aと1錠Bを毎日服用する必要があります。
患者はAのフラスコとBのフラスコを持っています。タブレットAをグラスに溶かした後、彼はそこにBの入ったフラスコから2錠を投げ、1 Aと2 Bの溶液のグラスを受け取りました。このソリューションを注ぎ、新しいものを準備します。 この患者は、ピルを失うことなく、どのように処方薬を服用し続けることができますか?
- 平均給与
3人の従業員は、給与の平均を知りたいと考えています。 個々の給与を共有することはできません。 どのようにして平均給与を計算できますか?
翻訳3人の従業員は、個々の給与を表明することは禁止されているにもかかわらず、平均給与(うち3人)を知りたいと考えています。 彼らは平均給与をどのように計算しますか?
タスク
- 自然数の可能な構成を見つける
自然数nが与えられた場合、順序を考慮したときにnを自然数の和として表現できる方法の数を見つけるプログラムを作成します。 用語の順序が異なる2つのシーケンスは、合計の異なる構成を定義します。
例:
入力:4
出力:8
説明
8ポジション構成はすべて次のとおりです。
4、1 + 3、3 + 1、2 + 2、1 + 1 + 2、1 + 2 + 1、2 + 1 + 1および1 + 1 + 1 + 1
入力:8
出力:128
翻訳自然数nが与えられたら、順序を考慮に入れて、その合計が結果としてnになる数の組み合わせの数を見つけるプログラムを作成します。 順序が異なる2つのシーケンスは、異なる組み合わせと見なされます。
例:
入口:4
出力:8
説明:4、1 + 3、3 + 1、2 + 2、1 + 1 + 2、1 + 2 + 1、2 + 1 + 1および1 + 1 + 1 + 1
- 3を含まない数を数える
数字nが与えられた場合、1からnまでの数字のカウントを返す関数を作成します。これらの数字は10進表現に数字3を含みません。
例:
入力:n = 10
出力:9
入力:n = 45
出力:31
//番号3、13、23、30、31、32、33、34、
// 35、36、37、38、39、43には数字3が含まれます。
入力:n = 578
出力:385
翻訳番号nが与えられた場合。 1からnまでの10進表記で3を含まない数字の数をカウントするプログラムを作成します。
例:
入力:n = 10
出力:9
入力:n = 45
出力:31
//番号3、13、23、30、31、32、33、34、
// 35、36、37、38、39、43には3が含まれます。
入力:n = 578
出力:385
- ブール配列パズル
次の仕様に従ってプログラムを作成します。
入力:値0および1を持つ2つの要素の配列arr []
出力:両方の要素を0にします。
要件:従うべき仕様は次のとおりです。
1)1つの要素が0であることは保証されていますが、その位置はわかりません。
2)別の要素については、0または1であるとは言えません。
3)配列要素を補完することはできますが、and、またはmulti、divisionなどの操作はできません。 など
4)if、else、loop構造は使用できません。
5)明らかに、0を配列要素に直接割り当てることはできません。
翻訳次の要件を満たすプログラムを作成します。
入力:可能な値1または0を持つ2つの要素の配列arr []
出力:両方の要素を0に等しくします
要件:
1)1つの要素が0であることが知られていますが、その位置は不明です
2)2番目の要素についてこれを言うことはできません。0または1にすることができます。
3)配列の要素のみを補完できます。orや、乗算、除算などの他の操作は許可されません。
4)条件付き構成、サイクルを使用することは不可能です。
5)配列要素に0を明示的に書き込むことはできません。
回答は来週以内に行われます-決定する時間があります。 頑張って
解決策
- 質問1正しい答えはコメントで与えられました:
別のタブレットAをグラスに追加し、グラスの半分を混ぜて飲んで、翌日の半分を残す必要があります。
- 質問2
- タスク1正しい解決策もコメントに見つかりました。
少し分析することで、組み合わせの数が2 n-1であることがわかります。
#include<iostream> using namespace std; #define ull unsigned long long ull countCompositions(ull n) { // Return 2 raised to power (n-1) return (1L) << (n-1); } // Driver Code int main() { ull n = 4; cout << countCompositions(n) << "\n"; return 0; }
- タスク2再帰的ソリューションオプション:
#include <stdio.h> /* returns count of numbers which are in range from 1 to n and don't contain 3 as a digit */ int count(int n) { // Base cases (Assuming n is not negative) if (n < 3) return n; if (n >= 3 && n < 10) return n-1; // Calculate 10^(d-1) (10 raise to the power d-1) where d is // number of digits in n. po will be 100 for n = 578 int po = 1; while (n/po > 9) po = po*10; // find the most significant digit (msd is 5 for 578) int msd = n/po; if (msd != 3) // For 578, total will be 4*count(10^2 - 1) + 4 + count(78) return count(msd)*count(po - 1) + count(msd) + count(n%po); else // For 35, total will be equal to count(29) return count(msd*po - 1); } // Driver program to test above function int main() { printf ("%d ", count(578)); return 0; }
-