カタツムリの挑戦

画像 このトピックでは、クイックウィットのための3つのかなり基本的なタスクを提案します。 初心者プログラマー(おそらく、初心者向け、学校、本当のプログラマーにはあまりにもありふれているので)。 または、おそらく、インタビューのために、しかし、1つの狭い側面を具体的に確認するために:どのくらいの人が自分自身で決定を下すことができ、自分自身のために涙と微調整をしないか。



ベース



基礎として、学校の小学校の学年のためのかなりよく知られているカタツムリのタスクが選ばれました。 「カタツムリは5メートルの高さの柱に忍び寄っています。 毎日、彼女は3メートル上に忍び寄って、毎晩2メートル下に移動します。 柱の頂上まで何日クロールしますか。」



ご存じのように、多くの学生は、3日目の終わりにカタツムリがすでに頂点に達しているという事実を考慮せずに、単に5を(3-2)で割って5日間を取得することで中断しました。



学童向け
全体のプロセスは、カタツムリが忍び寄る(昼間ではなく)日光の始まりから始まります。 柱の上部には水平のプラットフォームがあり、そこに達するとカタツムリはもう下に移動しません。 柱表面の垂直部分から最終水平部分に移動するための時間コストはゼロであると考えています。


タスク1



Real¹の非負の数が導入されています。1日のうち何人が忍び寄っています。 夜の間にどれくらい下がるか。 ポストの高さ。 答えが表示されるはずです-最低限必要な整数日。



従来のソリューション
  1. 列の高さが0の場合、0を返します。
  2. 1日の走行距離が0の場合、無限大/never²を返します。
  3. 列の高さと1日の走行距離(



    )の差を計算します。 非正の場合、1を返します。
  4. 1日の走行距離(



    )を計算します。 正でない場合-無限大/never²を返します。
  5. 1 + ceil( / )



    を返します。


¹有効なのは、浮動小数点のことです。 あなたは全体を取ることができます。 一番下の行は、一般的な場合、列の高さと日ごとの走行距離の差は、一日の走行距離の倍数ではないかもしれないということです。

²これらのオプションは、そうであっても、許されます(または、これが起こらないという条件で設定されます)。



結論として、決定者は少なくとも次のことを処理する必要があります。(1)古典的なケース(ピークは初日にではなく、いずれかの日の終わりに正確に到達します)。 (2)複数の長さ(最初の日にピークに達しておらず、1日の終わりに正確に達していない); (3)短い長さ(最初の日の終わりまでにピークに達する)。



タスク2



同じこと。 ただし、必要な最小日数ではなく、1日の長さに対する整数(おそらく整数)を返す必要があります。 毎日、夜は正確に0.5であると想定されます(プロセスは1日の始まりから正確に始まります)。 カタツムリは昼夜を問わず一定の速度で移動します。



タスク3



同じこと。 プロセスは任意の時間に開始され、正確にはその日の始まりには開始されません。 ユーザーは、任意の実数、つまりプロセスの開始の「時間」を入力します。 答えは、任意の実数、つまりプロセスの終了の「時間」です。



に触発
FDPの素晴らしい教師がかつて示した具体的な物理問題。



タスク1

100 Hの力で、Vasyaはダイナモメーターのハンドルを引っ張ります。このハンドルの2番目のハンドルは、伸びないロープで固定壁に固定されています。

質問:動力計はどのような力を発揮しますか?



タスク2

それぞれ100 Hの力を持つVasyaとFedyaは、動力計の反対側のハンドルに引っ張られます。

質問:動力計はどのような力を発揮しますか?



タスク3

Vasyaは動力計のハンドルを80 Nの力で引っ張り、Fedyaは弱いため、反対側のハンドルを70 Nの力で引っ張ります。

質問:動力計はどのような力を発揮しますか?



非表示のテキスト
それは些細なことのようですが、多くの学生は2番目のタスクを中断しました。 特にこの順序(最初-成功、2番目-失敗、3番目-o_O)の場合。 また、これらのタスクを理解することで、N年のすべての期間で生徒がクリックスルーできる基本原則をより深く理解することができます。



All Articles