洛谷 U85556 教官的遊戲

2022-03-20 05:54:22 字數 1434 閱讀 1212

洛谷傳送門

題目背景

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 ...