P1146 硬币翻转

简介: P1146 硬币翻转

题目描述

15a17d6cf90d4b618ebfb190843edc77.png

输入样例

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;
}


相关文章
|
3月前
|
测试技术
【深度优先搜索】【组合数学】【动态规划】1467.两个盒子中球的颜色数相同的概率
【深度优先搜索】【组合数学】【动态规划】1467.两个盒子中球的颜色数相同的概率
|
4月前
|
C++
排列硬币(C++)
排列硬币(C++)
22 0
|
4月前
leetcode-441:排列硬币
leetcode-441:排列硬币
18 0
|
5月前
|
Java
【剑指offer】-顺时针打印矩阵-19/67
【剑指offer】-顺时针打印矩阵-19/67
|
9月前
|
算法
LeetCode 算法 | 如何排列硬币?
LeetCode 算法 | 如何排列硬币?
|
11月前
剑指offer 68. 骰子的点数
剑指offer 68. 骰子的点数
42 0
|
11月前
剑指offer 28. 顺时针打印矩阵
剑指offer 28. 顺时针打印矩阵
39 0
【LeetCode】149. 直线上最多的点数
【LeetCode】149. 直线上最多的点数
【LeetCode】149. 直线上最多的点数
排列硬币
你总共有 n 枚硬币,并计划将它们按阶梯状排列。对于一个由 k 行组成的阶梯,其第 i 行必须正好有 i 枚硬币。阶梯的最后一行 可能 是不完整的。 给你一个数字 n ,计算并返回可形成 完整阶梯行 的总行数
48 0