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


  • 相关阅读:
    Oracle client 安装、配置
    js 计算金额是否小于总金额,大于是不能保存
    SQL Server函数与存储过程 计算时间
    sql Server 创建临时表 嵌套循环 添加数据
    SQL Server 事务日志文件已满,收缩日志文件(9002)
    sql Server 2008 数据库自动备份维护计划
    面向对象的三个基本特征:继承、封装、多肽
    MySQL 语句调优
    SQL 多表关联更新
    值类型、引用类型
  • 原文地址:https://www.cnblogs.com/AWCXV/p/7632362.html
Copyright © 2020-2023  润新知