日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

经典算法题 -- 百钱买百鸡

發(fā)布時(shí)間:2023/12/13 综合教程 38 生活家
生活随笔 收集整理的這篇文章主要介紹了 经典算法题 -- 百钱买百鸡 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

百錢買百雞的問題算是一套非常經(jīng)典的不定方程的問題,題目很簡(jiǎn)單:

公雞5文錢一只,母雞3文錢一只,小雞3只一文錢,用100文錢買一百只雞,其中公雞,母雞,小雞都必須要有。

問:公雞,母雞,小雞要買多少只剛好湊足100文錢。

分析:估計(jì)現(xiàn)在小學(xué)生都能手工推算這套題,只不過我們用計(jì)算機(jī)來推算,我們可以設(shè)公雞為x,母雞為y,小雞為z,

那么我們可以得出如下的不定方程,

x+y+z=100, ①

5x+3y+z/3=100, ②

①代表100雞和②代表100錢。

下面再看看x,y,z的取值范圍。

由于只有100文錢,則5x<100 => 0<x<20, 同理 0<y<33,那么z=100-x-y,

好,我們已經(jīng)分析清楚了,下面就可以編碼了。

using System;
using System.Collections.Generic;

public class MyClass
{
    public static void Main()
    {
        //公雞的上線
        for (int x = 0; x < 20; x++)
        {
            //母雞的上線
            for (int y = 0; y < 33; y++)
            {
                //剩余小雞
                int z = 100 - x - y;
                if ((z % 3 == 0) && (x * 5 + y * 3 + z / 3 == 100))
                {
                    System.Console.WriteLine("公雞:{0}只,母雞:{1}只,小雞:{2}只", x, y, z);
                }
            }
        }
        Console.ReadLine();
    }
}

結(jié)果出來了,確實(shí)這道題非常簡(jiǎn)單,我們要知道目前的時(shí)間復(fù)雜度是O(N2),實(shí)際應(yīng)用中這個(gè)復(fù)雜度是不能讓你接受的,最多最多能讓

人接受的是O(N)。

所以說我們必須要優(yōu)化一下,從結(jié)果中我們可以發(fā)現(xiàn)這樣的一個(gè)規(guī)律:公雞是4的倍數(shù),母雞是7的遞減率,小雞是3的遞增率,規(guī)律哪里

來,肯定需要我們推算一下這個(gè)不定方程。

x+y+z=100 ①

5x+3y+z/3=100 ②

令②x3-① 可得

7x+4y=100

=>y=25-(7/4)x ③

又因?yàn)?<y<100的自然數(shù),則可令

=>x=4k ④

將④代入③可得

=> y=25-7k ⑤

將④⑤代入①可知

=> z=75+3k ⑥

根據(jù)上面得出的④⑤⑥ 式子求K的區(qū)間,要保證0<x,y,z<100的話,

0<4k<100
0<25-7k<100
0<75+3k<100

滿足上面的三個(gè)式子,k的取值范圍只能是1,2,3,下面我們繼續(xù)上代碼。

using System;
using System.Collections.Generic;

public class MyClass
{
    public static void Main()
    {
        int x, y, z;
        for (int k = 0; k <= 3; k++)
        {
            x = 4 * k;
            y = 25 - 7 * k;
            z = 75 + 3 * k;
    
            Console.WriteLine("公雞:{0}只,母雞:{1}只,小雞:{2}只", x, y, z);
        }
        Console.ReadLine();
    }
}

這一次我們做到了O(N)的時(shí)間復(fù)雜度,很不錯(cuò),起碼優(yōu)化到了我能接受的范圍內(nèi),或許我們感覺到了數(shù)學(xué)的魅力,是的,因?yàn)?...

數(shù)學(xué)是科學(xué)的皇后。皇上自然就是物理了...

出處:http://www.cnblogs.com/huangxincheng/archive/2012/08/05/2624156.html

總結(jié)

以上是生活随笔為你收集整理的经典算法题 -- 百钱买百鸡的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。