题目描述
输入样例
4
输出样例
4 0111 1100 0001 1111
证明:
定义翻某n-1个为A类操作。
定义B操作,是把所有的硬币全部翻面。
定义C操作,是翻某一个硬币。
题主的问题是若干次A操作之后能否达到某个状态,而一个A操作等同于做一次B一次C,注意到B和C操作是可交换的,因此可以理解为先做若干次数的C操作,然后再做相同次数的B操作。
而做若干次C操作相当于一个一个硬币地翻,所以第i次翻转就是翻转除了第i个硬币以外的所有硬币。
所以一共需要翻n次,第i次翻转就是翻转除了第i个硬币以外的所有硬币。可以采用模拟.
参考代码
#include<iostream> using namespace std; int arr[120],n; int main() { cin>>n; cout<<n<<endl; for(int i = 0; i < n; i++){//每次反转第i个硬币 for(int j = 0;j<n;j++){ if(i!=j){ arr[j]==1?arr[j] = 0:arr[j] = 1; } cout<<arr[j]; } cout<<endl; } return 0; }