程設刷題 洗紙牌問題

2022-08-09 13:33:15 字數 969 閱讀 1757

目錄

紙牌題目描述

分析方法一(極有可能超時)

方法二(簡單)

另述有2n張紙牌,標號從1到2n。一次洗牌,可以將牌的排列改成n+1,1,n+2,2,...,n,2n。請問這樣洗牌幾次,可以讓牌回到原始的狀態。比如n=2時,1234->3142->4321->2413->1234 一共洗4次。

輸入每行輸入乙個整數n(1≤n≤10,000),n如果為0,表示輸入結束,不需要處理。

輸出每行輸出乙個樣例的結果。

樣例輸入12

3456

0樣例輸出24

361012

題目給的n達到了100,000,一般的方法極有可能超時。

下面是最先想到的成功超時的方法:

#include //1210 eddy's 洗牌問題 模擬  

#include using namespace std;

int n,m;

void change(string &str )

} int main()

cout後經過一番思考和演算……我發現這道題是有規律的。

規律就是1的位置,很容易發現1的位置是從1->2->4->8……如果超過數尾則從頭偏移,總之只要經過若干次移動,1再次移動在1的位置,就能夠保證洗牌洗回了原序列。

#includeusing namespace std;

int main()

while(pos!=1);

printf("%d\n",cnt);

}return 0;

}

#include int main()

【附:一文一圖】

刷題 C Valid Number問題

原題 validate if a given string is numeric.some examples 0 true 0.1 true abc false 1 a false 2e10 true note it is intended for the problem statement to ...

藍本刷題 七夕祭(貨倉選址 均分紙牌)

利用已知模型 1 均分紙牌模型 對於大小為n的陣列a,要使其每個陣列中數量相等 保證滿足可以使每個陣列均分為乙個正整數 sum a a n t 方法 從第乙個開始,要從後面拿來 t n a個,即使不足,也可以認為在此之前,a已經操作了從後面拿來,只是前後順序不一樣,不影響結果。所以可以遍歷a i 後...

刷題 ranking排名問題

有n個考點,每個考點裡面都有考生進行考試,如果現在分別給定每個考場的人數及該考場裡面的考生編號和成績,現在要求將所有考生按分數從高到底進行排序,並按順序輸出所有考生編號 排名 分數相同則按編號大小排序 考場號 以及考場內部的排名。分析 1.必然需要考慮先構造結構體,然後依次讀入學生資訊,再考慮對結構...