小明發現了乙個奇妙的數字。它的平方和立方正好把0~9的10個數字每個用且只用了一次。
你能猜出這個數字是多少嗎?
請填寫該數字,不要填寫任何多餘的內容。
我用愚蠢的方法,算出平方和三次方一共十位數字從什麼數字開始,然後輸出各個平方和三次方的結果(很愚蠢。。。)
看到的用set容器,不能插入重複的數字,真的很聰明!
#include
#include
#include
using
namespace std;
string i2s
(int i)
bool
check
(string s)
return s.
size()
==10
&&se.
size()
==10;}
intmain()
}return0;
}
將每個數的平方和立方的int結果轉換為string型別,並將string的每個字元存入set容器中。
在check函式裡,將每個字元放入容器,並且判斷string字串的長度和set容器的長度同時為10的時候才滿足。(因為set容器是不允許有重複的)。第一,string字串的長度要求為10而不是只要set容器的長度為10的時候,因為如果乙個數的平方和立方加起來是大於10位數且有位數是重複,而set容器是不允許有重複元素的,可能剛好有個數就滿足了set容器的長度為10,而string字串的長度是大於10的。(雖然在設定了這個數是在100中時,只判斷set容器的長度 if(ss.size()==10) 也是能找到69這個數字。。。)
易錯:定義set容器的時候,沒有深刻理解,寫的時候容易把set容器型別變為string,而事實上應該是char,因為set容器裡面放的應該是字串的每個字元,而不是乙個字串型別,因為要判斷的是每個字元有沒有重複。所以注意set容器的型別是char。
//
set ss;
set ss;
其實還是很巧妙的,利用string型別可以 + 進行拼接,將三次方和平方的數字分別轉換為字串之後再拼接在一起去判斷。
數字轉換為字串,就要複習stringstream #include< sstream>
set容器是char型別,因為裡面存的是每個字元『0』,『1』,這些。用se.insert(s[i]);可以將每個字元插入。可以把string字串用陣列的形式進行挨個訪問,s[i]。
迴圈訪問中for(int i=0;i這個 return s.size()==10&&se.size()==10; ,也是新思維的新天地。當set容器的size都是 等於10的時候,說明有十個不同字元啊。(剛開始就是沒有理解,想到這個)
藍橋杯填空題(一)
以下 可以從陣列a中找出第k小的元素。它使用了類似快速排序中的分治演算法,期望時間複雜度是o n 的。請仔細閱讀分析原始碼,填寫劃線部分缺失的內容。include int quick select int a,int l,int r,int k int i l,j r while i j while...
藍橋杯填空題 剪郵票
如下面第一張圖,有12張連在一起的12生肖的郵票。現在你要從中剪下5張來,要求必須是連著的。僅僅連線乙個角不算相連 具體例子比如第二張,第三張圖中,粉紅色所示部分就是合格的剪取。請你計算,一共有多少種不同的剪取方法。思路 先找到5個數的組合,然後從第乙個數字開始遍歷,經過上下左右操作檢測5個數是否都...
藍橋杯填空題 獎券數目
有些人很迷信數字,比如帶 4 的數字,認為和 死 諧音,就覺得不吉利。雖然這些說法純屬無稽之談,但有時還要迎合大眾的需求。某 活動的獎券號碼是5位數 10000 99999 要求其中不要出現帶 4 的號碼,主辦單位請你計算一下,如果任何兩張獎券不重號,最多可發出獎券多少張。思路 迴圈遍歷每一位數字的...