zoukankan      html  css  js  c++  java
  • 硬币翻转(找规律)

    硬币翻转

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 43  解决: 29
    [提交][状态][讨论版]

    题目描述

    在桌面上有一排硬币,共N枚,每一枚硬币均为正面朝上。现在要把所有的硬币翻转成反面朝上,规则是每次可翻转任意N-1枚硬币(正面向上的被翻转为反面向上,反之亦然)。求一个最短的操作序列(将每次翻转N-1枚硬币成为一次操作)。

    输入

    输入只有一行,包含一个自然数N(N为不大于100的偶数)。

    输出

    第一行包含一个整数S,表示最少需要的操作次数。接下来的S行每行分别表示每次操作后桌上硬币的状态(一行包含N个整数(0或1),表示每个硬币的状态:0——正面向上,和1——反面向上,不允许出现多余空格)。
    对于有多种操作方案的情况,则只需输出一种。

    样例输入

    4
    

    样例输出

    4
    0111
    1100
    0001
    1111
    【分析】第一次翻转左边第一个不变,第二次翻转左边第二个不变,第三次翻转左边第三个不变。。。。。。
    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cmath>
    #include <algorithm>
    #include <climits>
    #include <cstring>
    #include <string>
    #include <set>
    #include <map>
    #include <queue>
    #include <stack>
    #include <vector>
    #include <list>
    #include<functional>
    #define mod 1000000007
    #define inf 0x3f3f3f3f
    #define pi acos(-1.0)
    using namespace std;
    typedef long long ll;
    const int N=100005;
    const int M=15005;
    ll sum=1;
    int n,m,Q;
    int vis[N];
    int a[N];
    int dp[N][4];
    int maxn=0;
    int main() {
        memset(a,0,sizeof(a));
        scanf("%d",&n);
        for(int i=0; i<n; i++) {
            a[i]=0;
        }
        printf("%d
    ",n);
        for(int i=0; i<n; i++) {
            for(int j=0; j<n; j++) {
                 if(i!=j)a[j]=(a[j]+1)%2;
                 printf("%d",a[j]);
            }printf("
    ");
        }
        return 0;
    }
    View Code
  • 相关阅读:
    一个python实现重试机制的简要实践
    元编程技术和动态编译
    NDoc使用简要手册增加了例子代码
    问dudu,评论是否只能删除,不可以直接修改?
    《C#类设计手册》读书随笔(4)
    .NET下几种动态生成代码方式比较
    NDoc使用简要手册
    "引用"表示什么?
    .NET环境编程全景不错的书
    C#实现动态灵活调用业务方法的机制
  • 原文地址:https://www.cnblogs.com/jianrenfang/p/5751797.html
Copyright © 2011-2022 走看看