建設(shè)公司網(wǎng)站管理制度的意義百度網(wǎng)站推廣教程
藍(lán)橋杯-貨物擺放
- 1、題目描述
- 1.1 答案提交
- 1.2 運(yùn)行限制
- 2、解決方案
- 2.1 方案一:暴力解法(三重循環(huán))
- 2.2 方案二:找出乘機(jī)的因子
1、題目描述
??小藍(lán)有一個(gè)超大的倉(cāng)庫(kù),可以擺放很多貨物。
??現(xiàn)在,小藍(lán)有 n 箱貨物要擺放在倉(cāng)庫(kù),每箱貨物都是規(guī)則的正方體。小藍(lán)規(guī)定了長(zhǎng)、寬、高三個(gè)互相垂直的方向,每箱貨物的邊都必須嚴(yán)格平行于長(zhǎng)、寬、高。
??小藍(lán)希望所有的貨物最終擺成一個(gè)大的長(zhǎng)方體。即在長(zhǎng)、寬、高的方向上分別堆 L、W、H 的貨物,滿足n=L×W×H。
??給定 n,請(qǐng)問有多少種堆放貨物的方案滿足要求。
??例如,當(dāng) n=4 時(shí),有以下 66 種方案:1×1×4、1×2×2、1×4×1、2×1×2、2×2×1、4×1×1、1×1×4、1×2×2、1×4×1、2×1×2、2×2×1、4×1×1。
??請(qǐng)問,當(dāng) n=2021041820210418 (注意有 1616 位數(shù)字)時(shí),總共有多少種方案?
??提示:建議使用計(jì)算機(jī)編程解決問題。
1.1 答案提交
??這是一道結(jié)果填空的題,你只需要算出結(jié)果后提交即可。本題的結(jié)果為一個(gè)整數(shù),在提交答案時(shí)只填寫這個(gè)整數(shù),填寫多余的內(nèi)容將無法得分。
1.2 運(yùn)行限制
- 最大運(yùn)行時(shí)間:1s
- 最大運(yùn)行內(nèi)存: 256M
2、解決方案
2.1 方案一:暴力解法(三重循環(huán))
long num = 2021041820210418l;int count = 0;for ( long i = 1 ; i < num ; i++ ){for ( long j = 1 ; j < num ; j++ ){for ( long k = 1 ; k < num ; k++ ){if ( i * j *um ){count++;}}}}
?? 這個(gè)明顯超時(shí)了
2.2 方案二:找出乘機(jī)的因子
??我們先找出能夠被num整除的所有因子
,找到這些因子之后,由于是三個(gè)因子相乘的積等于num,由于因子的數(shù)量比num小太多了,此時(shí)對(duì)所有因子進(jìn)行三重循環(huán)統(tǒng)計(jì)三個(gè)因子乘積=num的數(shù)量
即可。
package LanQiaoBei.貨物擺放;import java.util.HashSet;public class Main {//直接三重循環(huán)時(shí)間復(fù)雜度非常大,另辟蹊徑public static void main(String[] args) {long num = 2021041820210418L;//用HashSet存放num因子,自動(dòng)解決因子重復(fù)問題HashSet<Long> common = new HashSet<>();//遍歷到num的平方根技術(shù),不需要都遍歷一遍for (long i = 1; i <= Math.sqrt(num); i++) {if (num % i == 0) {common.add(i);//可以整除就加入集合//i可以被整除,求出num的另外一個(gè)除數(shù)long n = num / i;if (n != i) { //不加判斷也行,因?yàn)槲覀冇玫膆ashset,但是系統(tǒng)判定超時(shí)common.add(n);}}}System.out.println("common.size():" + common.size());System.out.println(common);long count = 0;//這里不需要三重循環(huán),前兩個(gè)數(shù)確定后,第三個(gè)數(shù)也就確定了for (Long i : common) {for (Long j : common) {long k = num / (i * j);if (i * j * k == num) {count++;}}}System.out.println(count);}}
??運(yùn)行結(jié)果如下圖: