ホームページ  >  記事  >  Java  >  単純な Java アルゴリズム

単純な Java アルゴリズム

怪我咯
怪我咯オリジナル
2017-06-27 11:19:151527ブラウズ

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:EJBの基本次の記事:EJBの基本