日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【19】蓝桥杯之奇妙的数字(填空题)

發布時間:2024/8/1 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【19】蓝桥杯之奇妙的数字(填空题) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題描述:奇妙的數字

小明發現了一個奇妙的數字。它的平方和立方正好把0~9的10個數字每個用且只用了一次。
你能猜出這個數字是多少嗎?
請填寫該數字,不要填寫任何多余的內容。

參考答案:69

分析

我用愚蠢的方法,算出平方和三次方一共十位數字從什么數字開始,然后輸出各個平方和三次方的結果(很愚蠢。。。)
看到的用set容器,不能插入重復的數字,真的很聰明!

#include<iostream> #include<set> #include<sstream> using namespace std;string i2s(int i) {string s;stringstream ss;ss<<i;ss>>s;return s; } bool check(string s) {set<char> se;for(int i=0;i<s.size();i++){se.insert(s[i]);}return s.size()==10&&se.size()==10; } int main(){int a,b;string sa,sb;for(int i=1;i<1000;i++){a=i*i;b=i*i*i;sa=i2s(a);sb=i2s(b);if(check(sa+sb)){cout<<i<<endl;cout<<a<<endl;cout<<b<<endl;}}return 0; }

代碼參考鏈接:https://www.cnblogs.com/Aikoin/p/10580790.html

  • 將每個數的平方和立方的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<string> ss;set<char> ss;

    總結

    其實還是很巧妙的,利用string類型可以 + 進行拼接,將三次方和平方的數字分別轉換為字符串之后再拼接在一起去判斷。
    數字轉換為字符串,就要復習stringstream #include< sstream>
    set容器是char類型,因為里面存的是每個字符‘0’,‘1’,這些。用se.insert(s[i]);可以將每個字符插入。可以把string字符串用數組的形式進行挨個訪問,s[i]。
    循環訪問中for(int i=0;i<s.size();i++),要善于用到s.size()。
    這個 return s.size()==10&&se.size()==10; ,也是新思維的新天地。當set容器的size都是 等于10的時候,說明有十個不同字符啊。(剛開始就是沒有理解,想到這個)

    總結

    以上是生活随笔為你收集整理的【19】蓝桥杯之奇妙的数字(填空题)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。