zoukankan      html  css  js  c++  java
  • 【9803】硬币翻转

    Time Limit: 3 second
    Memory Limit: 2 MB

    【问题描述】

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

    【输入格式】

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

    【输出格式】

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

    【输入样例】

        4
    

    【输出样例】

        4
        0111
        1100
        0001
        1111

    【题解】

    //广搜方法,苦于不知道怎么表示状态,所以放弃了。

    进行n次操作。

    每一次,都有一个硬币不翻转。

    那么每个硬币就都会被操作n-1次,而n是一个偶数。则n-1是奇数。

    所以最后所有的硬币都会被操作奇数次。因此全都向上了。

    【代码】

    #include <cstdio>
    
    int n,ss[101];
    
    int main()
    {
    	scanf("%d",&n);
    	printf("%d
    ",n);
    	for (int i =1;i <= n;i++)
    		ss[i] = 0;
    	for (int i =1;i <= n;i++)
    		{
    			for (int j = 1;j<= n;j++)
    				if (i!=j) //表示第i个硬币这一次操作不翻转 
    					ss[j] = 1-ss[j]; //这是一个翻转的技巧 
    			for (int j =1;j<= n;j++)
    				printf("%d",ss[j]); //输出 
    			printf("
    ");
    		}
    	return 0;	
    }


  • 相关阅读:
    padding magin 盒子模型
    background元素背景--font字体
    border 边框
    浅析mvvm模式和mvc模式的区别和联系
    Win10下小米路由器4A百兆版刷Openwrt固件【图片详细版】
    Vue源码-手写mustache源码
    微信小程序支付实现流程
    Fiddler对安卓模拟器中的app抓包
    Niginx中Vue Router 历史(history)模式的配置
    ES6中Promise方法详解
  • 原文地址:https://www.cnblogs.com/AWCXV/p/7632362.html
Copyright © 2011-2022 走看看