題解 P1146 【硬幣翻轉】
阿新 • • 發佈:2018-12-17
想讓每個銀幣轉n次變成反面朝上,顯然n為奇數。
-
再進一步推算,假如是4個硬幣,那麼每個硬幣就會被轉3 次,x個硬幣就會轉x-1次。
-
再跟著樣例看,很明顯:
for一個i從1到n 除了a[i]之外,其他的都翻一遍。
-
問我怎麼來的規律?
很簡單啊, 從第一次和初始狀態(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;
}
}