zoukankan      html  css  js  c++  java
  • WUST Online Judge

    2106: 熄灯问题

    Time Limit: 1 Sec  Memory Limit: 128 MB   64bit IO Format: %lld
    Submitted: 73  Accepted: 24
    [Submit][Status][Web Board]

    Description

    有一个由按钮组成的矩阵,其中每行有6个按钮,共5行;每个按钮的位置上有一盏灯。

    当按下一个按钮后, 该按钮以及周围位置(上,下, 左,右)的灯都会改变状态。如果灯原来是点亮的,就会被熄灭。如果灯原来是熄灭的,则会被点亮。

    在矩阵角上的按钮改变3盏灯的状态,在矩阵边上的按钮改变4盏灯的状态,其他的按钮改变5盏灯的状态。

    与一盏灯毗邻的多个按钮被按下时,一个操作会抵消另一次操作的结果。

    给定矩阵中每盏灯的初始状态,求一种按按钮方案,使得所有的灯都熄灭。

    Input

    第一行是一个正整数N, 表示需要解决的案例数。

    每个案例由5行组成,每一行包括6个数字,这些数字以空格隔开,可以是0或1。0表示灯的初始状态是熄灭,1表示灯的初始状态是点亮的。

    Output

    对每个案例,首先输出一行字符串“PUZZLE #m:”,其中m是该案例的序号(从1开始计数)。

    接着按照该案例的输入格式输出5行,每行6个数字。1表示需要把对应的按钮按下,0表示不需要按对应的按钮。每个数字以一个空格隔开。

    Sample Input

    2
    0 1 1 0 1 0
    1 0 0 1 1 1
    0 0 1 0 0 1
    1 0 0 1 0 1
    0 1 1 1 0 0
    0 0 1 0 1 0
    1 0 1 0 1 1
    0 0 1 0 1 1
    1 0 1 1 0 0
    0 1 0 1 0 0

    Sample Output

    PUZZLE #1:
    1 0 1 0 0 1
    1 1 0 1 0 1
    0 0 1 0 1 1
    1 0 0 1 0 0
    0 1 0 0 0 0
    PUZZLE #2:
    1 0 0 1 1 1
    1 1 0 0 0 0
    0 0 0 1 0 0
    1 1 0 1 0 1
    1 0 1 1 0 1
     
    代码如下:
    #include <stdio.h>
    
    int main() {
        int i, j, k, n, t;
        int flag, temp = 0;
        int a1[7][8], a2[7][8];
        scanf("%d", &n);
        while (n--) {
            temp++;
            for (i = 0; i < 8; i++)
                a1[0][i] = a2[0][i] = 0;
            for (i = 1; i < 6; i++)
                a1[i][0] = a2[i][0] = a1[i][7] = a2[i][7] = 0;
            for (i = 1; i < 6; i++)
                for (j = 1; j < 7; j++)
                    scanf("%d", &a1[i][j]);
            for (i = 1; i < 7; i++)
                a2[1][i] = 0;
    LOOK:   flag = 1;
            for (i = 2; i < 6; i++)
                for (j = 1; j < 7; j++)
                    a2[i][j] = (a2[i-1][j]+ a1[i-1][j] + a2[i-1][j-1] + a2[i-2][j] + a2[i-1][j+1] ) % 2;
            for (j = 1; j < 7; j++) {
                if (a1[5][j] != (a2[5][j] + a2[5][j-1] + a2[5][j+1] + a2[4][j]) % 2) {
                    flag = 0;
                    break;
                }
            }
            while (!flag) {
                a2[1][1]++; k = 1;
                while (a2[1][k] > 1) {
                    a2[1][k] = 0;
                    k++;
                    a2[1][k]++;
                }
                goto LOOK;
            }
            printf("PUZZLE #%d:
    ", temp);
            for (i = 1; i < 6; i++) {
                for (j = 1; j < 7; j++) {
                    printf("%d", a2[i][j]);
                    if (j == 6) printf("
    ");
                    else printf(" ");
                }
            }
        }
        return 0;
    }
    
    作者:McR
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    获取父窗口的xxx节点的方法
    enumeration
    关于Java正则表达式的一些理解
    简单JNI的使用在Java中调用C库函数
    cursor管理
    [转]Vim配置与高级技巧
    [转]Vim+Taglist+Ctags
    在Windows下面使用cygwin将含有JNI的C文件编译成DLL文件
    vim转换大小写
    JMeter学习资料集锦
  • 原文地址:https://www.cnblogs.com/mcr-tcp/p/9170669.html
Copyright © 2011-2022 走看看