题目描述:
按照数学方法,每次翻
(n - 1)
个硬币相当于是每次翻一个硬币
证明:
定义翻某n-1个为A类操作。
定义B操作,是把所有的硬币全部翻面。
定义C操作,是翻某一个硬币。
题主的问题是若干次A操作之后能否达到某个状态,而一个A操作等同于做一次B一次C,注意到B和C操作是可交换的,因此可以理解为先做若干次数的C操作,然后再做相同次数的B操作。
而做若干次C操作相当于一个一个硬币地翻,所以第i次翻转就是翻转除了第i个硬币以外的所有硬币。
所以只需要翻硬币翻n次,第i次翻硬币翻除了第i个硬币外
(n - 1)
个硬币。
AC代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;
const int maxn = 104;
int a[maxn] = {0};
int main()
{
int n;
cin >> n;
for(int i = 1;i <= n;i++){
for(int j = 1;j <= n;j++){
if(j != i) a[j] = !a[j];
else continue;
}
if(i == 1) cout << n << endl;
for(int i = 1;i < n;i++) cout << a[i];
cout << a[n] << endl;
}
// for(int i = 1;i < n;i++) cout << a[i] << ' ';
// cout << a[n] << endl;
return 0;
}