0

1 台のロボットから始まるコードを作成する割り当てがあり、最大 200 台のロボットを作成するのに何ヶ月かかるかを調べる必要があります。

条件:

1台のロボットから始めて、このロボットは2か月間材料を集めます。これらの材料を使用して、毎月 1 台のロボットを 3 台作成できます。したがって、ロボット 1 台のサイクルは 5 か月です。そしてもちろん、新しく作ったロボットも2ヶ月かけて素材を集めて、それぞれ3体ずつ作る…。

私が持っている唯一のヒントは、3 つの変数を使用して実行する必要があるということです。収集月ごとに 2 つ、建物月ごとに 3 つ。

これは Java で行われます。前もって感謝します!

4

4 に答える 4

1

考えられるアプローチのヒント:

ここでの時間の最小単位は 1 か月なので、一度に 1 か月ずつ増加する時間変数を用意します。

ロボットが何をするかは、ロボットが現在 5 か月周期のどの月にいるかによって異なります。そのため、各状態にロボットが何台あるかを追跡し、

  • 最初の集まりの週には何人のロボットがいますか?
  • 2 回目の集会週には何人のロボットがいますか?
  • 最初の構築週に何台のロボットがいますか?
  • ビルド 2 週目にロボットは何台ありますか?
  • 3 番目の構築週に何台のロボットがいますか?

1 か月が経過すると、さまざまな状態のロボットの数はどのように変化しますか? ロボットは次の状態に移動します。おそらく(彼らの状態にもよりますが)彼らはまた新しいロボットを生産するでしょう. このロボットはどの状態になりますか?

必要な数のロボットが揃うまでループを続けます。

于 2012-09-11T09:26:20.510 に答える
1

この問題をオブジェクト指向の方法で解決します。

新しいロボットまたは null を返す可能性のある public メソッド workForAMonth() を持つクラス Robot を作成します。

メインループは次のようになります (疑似コード):

 create an empty List of robots
 add one robot to it
 while the list of robots has less than 200 entries
     create a new list of the newly build robots
     iterate the list of existing robots. for each robot:
          call the workForAMonth method. When it returns a robot, append it to the list of newly build robots
     append the newly build robots to the main list
     add 1 to month
 output month

workForAMonth メソッドは次のようになります。

 increment the private month counter of this robot by 1
 whe the counter is 5, set it back to 0
 when the counter is 2 or larger, return a new Robot, else return null
于 2012-09-11T08:05:21.080 に答える
0

ええと...解決策は非常に単純であることが判明しました、ここにそれがあります:

class Robot{
public static void main(String[] args){
    int g1 = 1, g2 = 0, b1 = 0, b2 = 0, b3 = 0, month = 0, tot = 0, left, built;
    while(tot<200){
        month++;
        tot = g1 + g2 + b1 + b2 + b3;
        System.out.println("Month " + month + " materials for " + (g1 + g2) + " robots were gathered and " + (b1 + b2 + b3) + " were built \n");
        System.out.println(" Totally there's " + tot + " Robots on the moon \n \n");
        built = b1 + b2;
        left = b3;
        b3 = b2;
        b2 = b1;
        b1 = g2;
        g2 = g1;
        g1 = (left + built);
    }
}
}
于 2012-09-11T16:00:54.320 に答える
0

まったくわからないので、ヒントを3つあげます。

  • ロボット、オブジェクト、プログラミングのことは忘れて (少なくとも最初のうちは) 、時間の経過とともにロボットの数の関数について考えてみてください。
  • 再帰について読む
  • あなたの問題に密接に関連しているフィボナッチ数について読んでください。
于 2012-09-11T08:11:01.553 に答える