窮舉類問題

2021-10-08 11:42:38 字數 1228 閱讀 7202

把只包含質因子2、3和5的數稱作醜數(ugly number)。例如6、8都是醜數,但14不是,因為它包含質因子7。 習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。

思路1:從1開始遞增,依次判斷每個數是否是醜數,不夠高效;

思路2:思路1之所以效率低,比較關鍵的一點是遍歷的每乙個數字都進行醜數判斷。思路2不是去判斷醜數,而是計算出醜數:因為每個醜數都可以看成是由1去乘以2、3、5,再乘以2、3、5而衍生出來的。可以用三個指標指向第乙個醜數1,三個指標分別表示乘2,乘3,乘5,將三個指標計算出來的最小的醜數放在陣列中,並將該指標向後移動乙個位置。為了得到第1500個醜數,需要乙個長度1500的陣列來記錄已經計算出來的醜數。因此這個思路也可以說是用空間換時間。

**

class

solution

int res = ugly[index -1]

;delete

ugly;

return res;}}

;

小明很喜歡數學,有一天他在做數學作業時,要求計算出9~16的和,他馬上就寫出了正確答案是100。但是他並不滿足於此,他在想究竟有多少種連續的正數序列的和為100(至少包括兩個數)。沒多久,他就得到另一組連續正數和為100的序列:18,19,20,21,22。現在把問題交給你,你能不能也很快的找出所有和為s的連續正數序列? good luck!

輸出描述:

輸出所有和為s的連續正數序列。序列內按照從小至大的順序,序列間按照開始數字從小到大的順序

思路

1、雙指標技術,就是相當於有乙個視窗,視窗的左右兩邊就是兩個指標

2、根據視窗內值之和來確定視窗的位置和寬度。

**

class

solution

res.

push_back

(v);

begin ++;}

//如果當前視窗內的值之和小於sum,那麼右邊視窗右移一下

else

if(cursum < sum)

end ++

;//如果當前視窗內的值之和大於sum,那麼左邊視窗右移一下

else

begin ++;}

return res;}}

;

窮舉問題 搬磚

拼題a 問題描述 某工地需要搬運磚塊,已知男人一人搬3塊,女人一人搬2塊,小孩兩人搬1塊。如果想用n人正好搬n塊磚,問有多少種搬法?輸入格式 輸入在一行中給出乙個正整數n。輸出格式 輸出在每一行顯示一種方案,按照 men cnt m,women cnt w,child cnt c 的格式,輸出男人的...

窮舉問題 搬磚

某工地需要搬運磚塊,已知男人一人搬3塊,女人一人搬2塊,小孩兩人搬1塊。如果想用n人正好搬n塊磚,問有多少種搬法?輸入在一行中給出乙個正整數n。輸出在每一行顯示一種方案,按照 men cnt m,women cnt w,child cnt c 的格式,輸出男人的數量cnt m,女人的數量cnt w,...

窮舉法解決組合問題

在下面的加法算式中,不同的符號代表不同的數字,相同的符號代表相同的數字。請設計程式求出 都 要 學 c 4個符號分別代表的數字。cpp view plain copy print?h k h j k h i j k h 2 0 0 8 都 要 學 c 4個符號分別代表的數字 從0到 9 然後進行組合...