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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

简便满分解法:1005 继续(3n+1)猜想 (25分)

發(fā)布時間:2024/2/28 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 简便满分解法:1005 继续(3n+1)猜想 (25分) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

立志用更少的代碼做更高效的表達(dá)


Pat乙級題解匯總——>傳送門


卡拉茲(Callatz)猜想已經(jīng)在1001中給出了描述。在這個題目里,情況稍微有些復(fù)雜。

當(dāng)我們驗(yàn)證卡拉茲猜想的時候,為了避免重復(fù)計(jì)算,可以記錄下遞推過程中遇到的每一個數(shù)。例如對 n=3 進(jìn)行驗(yàn)證的時候,我們需要計(jì)算 3、5、8、4、2、1,則當(dāng)我們對 n=5、8、4、2 進(jìn)行驗(yàn)證的時候,就可以直接判定卡拉茲猜想的真?zhèn)?#xff0c;而不需要重復(fù)計(jì)算,因?yàn)檫@ 4 個數(shù)已經(jīng)在驗(yàn)證3的時候遇到過了,我們稱 5、8、4、2 是被 3“覆蓋”的數(shù)。我們稱一個數(shù)列中的某個數(shù) n 為“關(guān)鍵數(shù)”,如果 n 不能被數(shù)列中的其他數(shù)字所覆蓋。

現(xiàn)在給定一系列待驗(yàn)證的數(shù)字,我們只需要驗(yàn)證其中的幾個關(guān)鍵數(shù),就可以不必再重復(fù)驗(yàn)證余下的數(shù)字。你的任務(wù)就是找出這些關(guān)鍵數(shù)字,并按從大到小的順序輸出它們。

輸入格式:
每個測試輸入包含 1 個測試用例,第 1 行給出一個正整數(shù) K (<100),第 2 行給出 K 個互不相同的待驗(yàn)證的正整數(shù) n (1<n≤100)的值,數(shù)字間用空格隔開。

輸出格式:
每個測試用例的輸出占一行,按從大到小的順序輸出關(guān)鍵數(shù)字。數(shù)字間用 1 個空格隔開,但一行中最后一個數(shù)字后沒有空格。

輸入樣例:
6
3 5 6 7 8 11

輸出樣例:
7 6


思路:打表, 定義一個數(shù)組置0, 按順序?qū)γ總€數(shù)字都進(jìn)行循環(huán), 對期間的所有出現(xiàn)的數(shù)字置1, 最后只要輸出為0的就可以了。

具體見代碼。

注意: 數(shù)組要定義的大一些。


代碼展示

#include<iostream> #include<vector> #include<algorithm> using namespace std; int vis[300005];void While(int n) {while(n != 1) {if(n%2 == 0) { n/=2; vis[n]=1; } else { n = n*3+1; }} }int main() {vector<int>v;int n; cin>>n; while(n--) {int x; cin>>x;v.push_back(x); //存入vector,待會判斷時用 While(x); //打表循環(huán) }sort(v.begin(), v.end(), greater<int>() ); //降序排序 int siz = v.size(); //要在這里定義,否則每次for循環(huán)都會計(jì)算一次 int T = 0;for(int i = 0; i < siz; i++) {if(vis[v[i]] == 0) {cout <<(T==0?"":" ") << v[i];T++;}} return 0; }

每日一句

零星的變好,最后也會如星河般閃耀。

總結(jié)

以上是生活随笔為你收集整理的简便满分解法:1005 继续(3n+1)猜想 (25分)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。