每週一題(1)

2021-10-01 13:59:52 字數 1227 閱讀 3266

把2019分解成3個各不相同的正整數之和,並且要求每個正整數都不包含數字2和4.一共有多少種不同的分割方法。

注意交換3個整數的順序被視為同一種方法1,例如1000+1001+18和1001+1000+18被視為同一種。

這是一道結果填空的題,你只需要算出結果後提交即可。本題的結果為乙個整數,在提交答案時只填寫這個整數,填寫多餘的內容將無法得分。

第十屆藍橋杯軟體類省賽b組

首先題目要求,所有的數字不應該含有2或者4。那麼我們在遍歷的時候,就需要判斷出哪個數字是含有2或4的,我們只讓不含有的參與運算。因此,需要先編寫乙個函式,能夠判斷是否含有數字2或4。

那麼如何編寫這個函式呢?這裡提供的思路是,通過迴圈一位一位的判斷,只要這個數字有一位含有2或者4,就返回乙個false。

示例如下:

bool

check

(int number)

//型別為布林型,引數為需要判斷的數

number/=10

;//每判斷一位,就要再判斷前一位

}return

true

;//如果都不滿足,則返回

}

另外,這道題要注意的是,不允許有重複的分割方法。因為如果單純的使用暴力迴圈,從第一次一直遍歷到最後一次,總會出現同樣的情況。

例如題目所給,假如現在找到的第乙個數是1000,那麼很容易得到它所對應的分割方法,其中之一是1000+1001+18。

那麼我們繼續向後遍歷,這時的第乙個數是1001,也很容易能夠得到1001+1000+18這個分割方法。然而我們發現,它與上一次迴圈中找到的分割方式是重複的。因此,如果以這種方式遍歷,我們最終得到的分割方法一定比實際的要多。

所以為了解決這個問題,我們在巢狀迴圈時,要設定第二個數始終大於第乙個數。因此當我們最外層的增量為i時,第二層的自增量為i+1。(只需要兩層迴圈,因為只要確定了2個數字,第三個數也就隨之確定)

全**如下:

#include

using

namespace std;

bool

check

(int number)

//型別為布林型,引數為需要判斷的數

number/=10

;//每判斷一位,就要再判斷前一位

}return

true

;//如果都不滿足,則返回

}int

main()

hihoCoder每週一題

時間限制 10000ms 單點時限 1000ms include include include include includeusing namespace std int n,m define max 26 struct trie trie void createtrie char str el...

每週一題 4

如圖p1.png所示的螺旋折線經過平面上所有整點恰好一次。對於整點 x,y 我們定義它到原點的距離dis x,y 是從原點到 x,y 的螺旋折線段的長度。例如dis 0,1 3,dis 2,1 9 給出整點座標 x,y 你能計算出dis x,y 嗎?輸入格式 x和y對於40 的資料,1000 x,y...

每週一題 5

小明維護著乙個程式設計師論壇。現在他收集了乙份 點讚 日誌,日誌共有n行。其中每一行的格式是 ts id 表示在ts時刻編號id的帖子收到乙個 贊 現在小明想統計有哪些帖子曾經是 熱帖 如果乙個帖子曾在任意乙個長度為d的時間段內收到不少於k個讚,小明就認為這個帖子曾是 熱帖 具體來說,如果存在某個時...