| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1340 人关注过本帖
标题:熄灯问题
只看楼主 加入收藏
心剑菩提
Rank: 1
等 级:新手上路
帖 子:249
专家分:0
注 册:2007-5-17
收藏
 问题点数:0 回复次数:3 
熄灯问题

Time Limit:1000MS Memory Limit:65536K
Total Submit:5 Accepted:2

Description

问题描述:有一个由按钮组成的矩阵,其中每行有6个按钮,共5行。每个按钮的位置上有一盏灯。当按下一个按钮后,该按钮以及周围位置(上边、下边、左边、右边)的灯都会改变一次。即,如果灯原来是点亮的,就会被熄灭;如果灯原来是熄灭的,则会被点亮。
在矩阵角上的按钮改变3盏灯的状态
在矩阵边上的按钮改变4盏灯的状态
其他的按钮改变5盏灯的状态


Input

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

Output

对每个案例,首先输出一行,输出字符串“PUZZLE #m”,其中m是该案例的序号。接着按照该案例的输入格式输出5行,其中的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


Source

搜索更多相关主题的帖子: 按钮 熄灯 Limit 矩阵 状态 
2007-10-25 21:26
万兽无缰
Rank: 1
等 级:新手上路
威 望:1
帖 子:296
专家分:0
注 册:2007-8-27
收藏
得分:0 
大哥你怎么老是COPY题目来啊 

女朋友问我想怎么死~~~
             我说我想"爽死"
2007-10-26 08:15
shlg1229
Rank: 1
等 级:新手上路
帖 子:107
专家分:0
注 册:2007-9-24
收藏
得分:0 
额~~~~~~~~

个人意见,不代表官方看法
2007-10-26 09:05
crackerwang
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:833
专家分:0
注 册:2007-2-14
收藏
得分:0 
#include<stdio.h>
int a[5][6];
int b[5][6];
int ans[5][6];
int dx[]={0,0,1,-1,};
int dy[]={1,-1,0,0};
void change(int x,int y)
{
b[x][y]=1-b[x][y];
int i;
int xx,yy;
for(i=0;i<4;i++)
{
xx=x+dx[i];
yy=y+dy[i];
if(xx>=0&&xx<5&&yy>=0&&yy<6) b[xx][yy]=1-b[xx][yy];
}
}
int check(int m)
{
int i,j,k=m;
for(i=0;i<5;i++)
{
for(j=0;j<6;j++)
{
b[i][j]=a[i][j];
ans[i][j]=0;
}
}
for(i=0;i<6;i++)
{
ans[0][i]=k%2;
k/=2;
if(ans[0][i]) change(0,i);
}
for(i=1;i<5;i++)
{
for(j=0;j<6;j++)
{
if(b[i-1][j])
{
ans[i][j]=1;
change(i,j);
}
}
}
for(i=0;i<6;i++)
{
if(b[4][i]) return 0;
}
return 1;
}
int main()
{
int n,i,j;
int t=1;
scanf("%d",&n);
while(n--)
{
for(i=0;i<5;i++)
{
for(j=0;j<6;j++)
{
scanf("%d",&a[i][j]);
}
}
for(i=0;i<64;i++)
{
if(check(i)) break;
}
printf("PUZZLE #%d\n",t++);
for(i=0;i<5;i++)
{
printf("%d",ans[i][0]);
for(j=1;j<6;j++) printf(" %d",ans[i][j]);
printf("\n");
}
}
}

2007-10-26 12:44
快速回复:熄灯问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016191 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved