51nod1613翻硬幣規律!

2021-07-10 06:09:21 字數 1801 閱讀 3464

【有 n 個硬幣,一開始全部正面朝上,每次可以翻轉 k 個硬幣( k 小於 n ),那麼至少要 p 次翻轉,才能讓所有硬幣反面朝上,求 p 的值】

高能預警:

本題所用的數學工具不超過初中畢業水平,但情況繁多,完整討論並不容易,結論寫在最後。

解:本題的精髓在於對奇偶性的討論。

——情況1:若 n 為奇數——

1.1 若 k 為偶數 => 無解

證明:若要讓所有硬幣最終翻面,則每個硬幣都要翻面奇數次,共有奇數個硬幣,所以所有硬幣的翻面總數為奇數,但每次只能翻面偶數個硬幣,顯然不可能。證畢!

1.2 若 k 為奇數 => p為不小於 n/k 的最小奇數

(例1:n=7,k=5,那麼 n/k =1.4 則 p=3 )

(例2:n=25,k=7,那麼 n/k= 25/7 則 p=5)

證明

必要性

若要讓所有硬幣最終翻面,則每個硬幣都要翻面奇數次,共有奇數個硬幣,所以所有硬幣的翻面總數為奇數,而每次只能翻奇數個硬幣,所以總的翻轉次數必然是奇數次,而翻轉次數不到 n/k 次時,並不能使所有硬幣至少翻面1次,所以p至少是不小於 n/k 的最小奇數

充分性:

給硬幣編號為1-n,

第1次翻轉編號:1~n-2

第2次翻轉編號:1~n-3、n-1

第3次翻轉編號:1~n-3、n

done!(前 n-3 個硬幣翻面 3 次,後 3 個翻面 1 次)

只要讓前面的

根據定義,

這個情況,和 n 為奇數是類似的。

2.2 若

2.3 若

當反之,只要讓前面的

2.4 若且為奇數=> p為不小於 n/k 的最小偶數

當反之,首先由奇偶性得出翻轉次數必為偶數,

只要讓前面的

————————————

綜上所述:

若 n 為奇數:

若 n 為偶數:

#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;

//#pragma comment(linker, "/stack:102400000,102400000")

#define maxn 10

#define mod 1000000007

#define mem(a , b) memset(a , b , sizeof(a))

#define ll long long

#define inf 100000000

int main()

}else

else if(k % 2 == 0&& k > n/2 && k < n-1) cout << 3 << endl;

else if(k %2 && k < n/2)

else if(k %2 == 0 && k < n/2)}}

return 0;

}

51nod 硬幣遊戲

有乙個簡單但是很有趣的遊戲。在這個遊戲中有乙個硬幣還有一張桌子,這張桌子上有很多平行線 如下圖所示 兩條相鄰平行線之間的距離是1,硬幣的半徑是r,然後我們來拋硬幣到桌子上,拋下之後硬幣有時候會和一些直線相交 相切的情況也算是相交 有時候不會。請你來計算一下拋一次硬幣之後,該硬幣和直線相交數目的期望。...

翻硬幣(寬搜,規律)藍橋杯省賽

時間限制 1.0s 記憶體限制 256.0mb 小明正在玩乙個 翻硬幣 的遊戲。桌上放著排成一排的若干硬幣。我們用 表示正面,用 o 表示反面 是小寫字母,不是零 比如,可能情形是 oo oooo 如果同時翻轉左邊的兩個硬幣,則變為 oooo oooo 現在小明的問題是 如果已知了初始狀態和要達到的...

51nod 1381 硬幣遊戲

基準時間限制 1 秒 空間限制 131072 kb 分值 5 難度 1級演算法題 有乙個簡單但是很有趣的遊戲。在這個遊戲中有乙個硬幣還有一張桌子,這張桌子上有很多平行線 如下圖所示 兩條相鄰平行線之間的距離是1,硬幣的半徑是r,然後我們來拋硬幣到桌子上,拋下之後硬幣有時候會和一些直線相交 相切的情況...