1. 程式人生 > >題解 P1146 【硬幣翻轉】

題解 P1146 【硬幣翻轉】

想讓每個銀幣轉n次變成反面朝上,顯然n為奇數。

  1. 再進一步推算,假如是4個硬幣,那麼每個硬幣就會被轉3 次,x個硬幣就會轉x-1次。

  2. 再跟著樣例看,很明顯:

    for一個i從1到n 除了a[i]之外,其他的都翻一遍。

  3. 問我怎麼來的規律?

很簡單啊, 從第一次和初始狀態(0000)的對照中我們可以看出只有第一個數字沒變,從第二次和第一次的對照中我們可以看出只有第二個數字沒變,從第三次和第二次的對照中我們可以看出只有第三個數字沒變……以此類推)

所以……

	#include<bits/stdc++.h>
	using namespace std;
	int main()

	{

		int
n; cin>>n; bool a[1000]; cout<<n<<endl; for (int i=1;i<=n;i++)//n個硬幣 { for (int j=1;j<=n;j++)//其他幾個硬幣 { if (i==j) a[j]=a[j];//除了自己其他都翻 else a[j]=not a[j];//翻 if (a[j]==true) cout<<1; else cout<<0; } cout<<endl; }
}