yinyin 筆試題

來源:互聯網
上載者:User

今天筆試遇到了一道題目 天平左邊有一個重量為x的物體,還有1,3,9....3^n這n+1個砝碼,問怎麼將砝碼放到天平兩邊使得平衡

每個砝碼只有一個,有的可以不用

開始給了一個具體的x讓算,那樣具體一點還好算,後來給的x,不定量的砝碼,想用遞迴,回溯,但是感覺很難寫

後來想到砝碼都是3的整數次冪,想能不能用三進位去做,結果證明果然有效

具體思路如下

將x轉化成三進位放到數組a[N],將所有的砝碼放到數組b[M]中

從低往高一次比較對應位的數值,三進位肯定只有0,1,2三種情況,因為有些砝碼可能要放到左邊,所以左邊還要加上相應的砝碼,可能產生進位,於是設進位標識為takeover

這樣三個數字加上是否進位,總共六種情況

因為b數組都為1

當a[i]==0&&takeover=false

也就是沒有進位的時候,此時要保證該位相等需要將右邊的這個權值的砝碼拿掉,也就是將b[j]=0

當a[i]==0&&takeover=true

也就是有進位的時候,此時不變

當a[i]==1&&takeover=false  也不需要改變

當a[i]==1&&takeover=true     此時a[i]=2,將b[j]對應的那個砝碼給a,那麼a[i]=0, b[j]=0, takeover=true

當a[i]==2&&takeover=false    同上,也是b[j]對應的那個砝碼給a,那麼a[i]=0, b[j]=0, takeover=true

當a[i]==2&&takeover=true      此時a[i]=0, 將b中對應砝碼去掉即可,也就是b[j]=0

當某個數組先結束時,此過程退出,如果a先結束,那麼對應b的高位權值的砝碼都不用加了,如果b先結束,說明x重量超過所有砝碼的重量,即使加上前面去掉的那些,也無濟於事。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.