1. 質問
5 セントで鶏 1 羽、3 セントで鶏 1 羽、1 セントでひよこ 3 羽を購入します。さて、100 文で鶏 100 羽を買った場合、雄鶏、雌鶏、ひよこは何羽になるでしょうか。
2. アイデア
まず、鶏、鶏、ひよこがそれぞれ i、j、k を持っていると仮定します。次に、次の方程式があります:
5i+。 3j+ k/3=100
i+j+k=100; i,j,k>=0
明らかに、この問題には複数の解決策があります。雄鶏の最大数は 20 です。すべての雄鶏を購入する必要があるため、最小数は 0 になります。同様に、雄鶏の最大数は 0 です。鶏は 30 羽で、最小数は 0 羽です。 鶏は約 300 羽購入できますが、必要な鶏は 100 羽だけです。しかも100ウェンかかるので、ひよこだけを売るのは不可能です。
3つのステップ
1. トリプルforループを作成します
2. 条件判断をする
3. 出力
4. コード
rree
5. 出力
コック: 0雌鶏: 25 ひよこ: 75
雄鶏: 3 雌鶏: 20 ひよこ: 77
雄鶏: 4 雌鶏: 18 ひよこ: 78
雄鶏: 7 雌鶏:13 ひよこ:80羽
雄鶏:8雌鶏:11ひよこ:81
雄鶏:11雌鶏:6ひよこ:83
雄鶏:12雌鶏:4 ひよこ:84
六、优化
这次我们要求公鸡、母鸡、小鸡都必须有,那么就需要从1开始:
/* * 所有鸡都有 */ public static void method_2() { for (int i = 1; i < 20; i++) { for (int j = 1; j < 33; j++) { int z = 100 - i - j; if (z % 3 == 0 && i * 5 + j * 3 + z / 3 == 100) { System.out.println("公鸡:" + i + "\t母鸡:" + j + "\t小鸡:" + j); } } } }
输出:
公鸡:4母鸡:18小鸡:78
公鸡:8母鸡:11小鸡:81
公鸡:12母鸡:4小鸡:84
结果出来了,确实这道题非常简单,我们知道目前的时间复杂度是O(N2),但是能不能把它变成为O(N)呢。所以我们可以继续优化一下,从结果中我们可以发现这样的一个规律:公鸡是4的倍数,母鸡是7的递减率,小鸡是3的递增率,规律哪里来,肯定需要我们推算一下这个不定方程。
x+y+z=100 ① 5x+3y+z/3=100 ② 令②x3-① 可得 7x+4y=100 =>y=25-(7/4)x ③ 又因为0<y<100的自然数,则可令 x=4k ④ 将④代入③可得 => y=25-7k ⑤ 将④⑤代入①可知 => z=75+3k ⑥
要保证0
/* * 优化方法 */ public static void method_3() { int i,j,z; for(int k=1;k<=3;k++){ i = 4 * k; j = 25 - 7 * k; z = 75 + 3 * k; System.out.println("公鸡:" + i + "\t母鸡:" + j + "\t小鸡:" + z); } }
以上が単純な Java アルゴリズムの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。