洛谷傳送門
題目背景
seawayseaway和iamrjjiamrjj一起被萬惡的分班考試分到了高一 · 66班,當然了,他們要參加軍訓。在訓練場上,教官帶66班玩了個小遊戲......
題目描述
有這樣的乙個經典小遊戲:大家從11開始依次數數,數到77的倍數或者數字中帶77的數就拍手。而教官的遊戲是這樣的:因為我們是66班,所以數到66的倍數或者數字中帶66的數就喊「報告!」,這個倒霉蛋要被淘汰。教官還說,他要獎勵最後剩下的同學。seawayseaway和iamrjjiamrjj頓時摩拳擦掌,而他們都想到程式設計解決這個問題。但是...訓練場沒有電腦啊!所以他們倆偷偷地找到了你,希望你告訴他,他們站到哪個位置能贏。(假設他們倆是乙個人)
輸入格式
輸入檔案包括乙個整數nn,表示高一 · 66班一共有nn個同學。
輸出格式
輸出檔案包括乙個整數pp,表示seawayseaway和iamrjjiamrjj站的位置。
輸入輸出樣例
輸入 #1 複製
7輸出 #1 複製
1說明/提示
資料範圍: 1\le n \le 10^51≤n≤105。
這是一道模擬的題。
我們分析題意,題目是在問這樣乙個問題:\(n\)個人站圈數數,數到能被6整除的數或者含6的數就被淘汰,其他人繼續數。問最後剩下的人的位置。
那麼我們很容易想到用模擬解這個問題(其實確實沒有什麼更容易理解的演算法)。那麼我們試著手敲**就會發現一些比較難處理的點:
怎麼維護有人淘汰後的佇列?
怎麼維護圈形佇列?
怎麼判斷數中的每位是否含6?
我們知道,題目的佇列是圈形,那麼我們就可以用一種手段反覆遍歷這個圓(用乙個pos變數表示位置,每次迴圈pos++,如果》n(加冒了),就從1開始)。這時再借助乙個v陣列表示有沒有被淘汰,如果沒有,就持續累加tot(即這個人數的數)。然後再判斷是否合法。
判斷是否合法這裡可以用乙個外接函式來進行。首先判能否被6整除。如果不能再判各位有沒有6,這個也很簡單,大家學習過數字各位分割,其實和那個的原理是一樣的,每次/10就能「乾掉」最後一位,然後再模上10看看餘數是不是6即可。
所以這題就能這樣的a過去。
模擬是最簡單最樸素同時也是最考人的演算法(個人覺得)。這種演算法考的是oier們**實現思路的能力,這也是之後的學習中最重要的能力之一。
(所以這道題被我評成了普及+/提高-的綠題)
**:
#includeusing namespace std;
int n,pos,tot,last,cnt;
int v[100001];
bool check(int x)
return 0;
}int main()
if(cnt==n)
break;}}
printf("%d",last);
return 0;
}
洛谷1290 歐幾里德的遊戲
題目描述 歐幾里德的兩個後代stan和ollie正在玩一種數字遊戲,這個遊戲是他們的祖先歐幾里德發明的。給定兩個正整數m和n,從stan開始,從其中較大的乙個數,減去較小的數的正整數倍,當然,得到的數不能小於0。然後是ollie,對剛才得到的數,和m,n中較小的那個數,再進行同樣的操作 直到乙個人得...
洛谷 U140112 Seawayson的趣味題
洛谷傳送門 seawayseawa y博士是mt 我叫mt,一款遊戲 領域的知名專家,他的兒子名叫seawaysonseawayson。現在,剛剛放學回家的seawaysonseawayson正在思考乙個有趣的問題。今天在資訊學課堂上,老師講解了關於進製的知識。老師向他們介紹了二進位制以及二進位制的...
洛谷U138580 簡單的打擊
幫助統治者解決問題之後,統治者準備獎勵你兩把劍,讓你去打怪。具體的來說,兩把劍分別代表了兩個長度為 n 的序列 a,b 你什麼方面都強,所以你可以分別重新鍛造這兩把劍,鍛造就相當於重新排列這兩個序列。合併這兩把劍,讓它變成一把新劍 對應序列 c 合併相當於把對應位置上的數加起來 c i a i b ...