您的位置:首页 > 其它

睡觉前请关灯的 破解尝试版本 由已知解求一个矩阵的步骤

2016-03-31 00:29 423 查看
#include<iostream>
#include"wz.h"
#include<ctime>
using namespace std;
#define  MAX  5
void show(int arr[][MAX])
{
for(int i=0;i<MAX;i++)
{
for(int j=0;j<MAX;j++)
{
cout<<arr[i][j]<< " ";
}
cout<<endl;
}
cout<<endl;
}

void Change(int arr[][MAX],int x,int y)
{
if(x < 0 || y < 0 || x >= MAX || y >= MAX)
{
return ;
}
arr[x][y] = 1 -arr[x][y];
if(x-1 >= 0)
{
arr[x-1][y] = 1 - arr[x-1][y];
}
if(x+1 <= MAX)
{
arr[x+1][y] = 1 - arr[x+1][y];
}
if(y-1 >= 0)
{
arr[x][y-1] = 1 - arr[x][y-1];
}
if(y+1 <= MAX)
{
arr[x][y+1] = 1 - arr[x][y+1];
}
}

int man()
{
int arr[MAX][MAX] = {0};
int x;
int y;
int k=0;
time_t t;
srand((unsigned)time(&t));
k=rand()%5;

while(k--)
{
x=rand()%5;
y=rand()%5;
cout<<k<<x<<y<<endl;
arr[x][y]=1;
}
show(arr);
cout<<"熄灯前睡觉 输入坐标(x,y)"<<endl;

while( 1 )
{
cin>>x>>y;
x=x-1;y=y-1;
Change(arr,x,y);
show(arr);
}
}

int main()
{
int x= (int )time(NULL)%10;
cout<<x<<endl;
return 0;
}
#include"wz.h"
#include"sts.h"
#define  MAX  5
void show(int arr[][MAX])
{
for(int i=0;i<MAX;i++)
{
for(int j=0;j<MAX;j++)
{
cout<<arr[i][j]<< " ";
}
cout<<endl;
}
cout<<endl;
}

void play(int arr[][MAX],int x,int y)
{
if(x < 0 || y < 0 || x >= MAX || y >= MAX)
{
return ;
}
arr[x][y] = 1 -arr[x][y];
if(x-1 >= 0)
{
arr[x-1][y] = 1 - arr[x-1][y];
}
if(x+1 < MAX)
{
arr[x+1][y] = 1 - arr[x+1][y];
}
if(y-1 >= 0)
{
arr[x][y-1] = 1 - arr[x][y-1];
}
if(y+1 < MAX)
{
arr[x][y+1] = 1 - arr[x][y+1];
}
}

void k1(int v[][MAX])
{
play(v,4,4); show(v);  play(v,4,0); show(v);
play(v,2,4); show(v);  play(v,2,0); show(v);
play(v,1,4); show(v);  play(v,1,0); show(v);
play(v,1,3); show(v);  play(v,1,1); show(v);
play(v,0,0); show(v);  play(v,0,4); show(v);
}
void k2(int v[][MAX])
{
play(v,4,4); show(v);   play(v,4,1); show(v);
play(v,4,0); show(v);   play(v,3,4); show(v);
play(v,3,0); show(v);   play(v,2,4);  show(v);

play(v,2,2); show(v);

play(v,2,1); show(v);  play(v,3,2); show(v);
play(v,4,4); show(v);  play(v,1,2); show(v);
play(v,0,3); show(v);  play(v,0,4); show(v);
}
void k3(int v[][MAX])
{
play(v,4,1); show(v);   play(v,3,4); show(v);
play(v,3,3); show(v);   play(v,3,1); show(v);
play(v,3,0); show(v);   play(v,2,1);  show(v);
play(v,2,0); show(v); play(v,1,4); show(v);
play(v,1,3); show(v); play(v,1,2); show(v);

play(v,2,0); show(v);  play(v,0,3); show(v);
}
void k4(int v[][MAX])
{
play(v,4,3); show(v);   play(v,4,1); show(v);
play(v,3,2); show(v);   play(v,3,1); show(v);
play(v,2,4); show(v);   play(v,2,3);  show(v);
play(v,2,1); show(v); play(v,2,0); show(v);
play(v,1,4); show(v); play(v,1,1); show(v);

play(v,0,2); show(v);  play(v,0,3); show(v);
play(v,2,3); show(v);  play(v,3,3); show(v);
play(v,4,3); show(v);  play(v,4,2); show(v);
}
void k5(int v[][MAX])
{
play(v,3,4); show(v);   play(v,3,2); show(v);
play(v,3,1); show(v);   play(v,3,0); show(v);
play(v,2,4); show(v);   play(v,2,2);  show(v);
play(v,2,1); show(v); play(v,1,4); show(v);
play(v,1,3); show(v); play(v,1,2); show(v);
play(v,1,1); show(v); play(v,1,0); show(v);

play(v,4,0); show(v);  play(v,3,1); show(v);
play(v,2,1); show(v);  play(v,0,1); show(v);
play(v,0,4); show(v);  play(v,2,3); show(v);
play(v,4,3); show(v);

}
void cp(int v[][MAX])
{    int i,j;int k=0;
for(i=0;i<MAX-1;i++)
{
for(j=0;j<MAX;j++)
{
if(v[i][j]==1) play(v,i+1,j);
}
}
show(v);
i=MAX-1;
for(j=0;j<MAX;j++)
{
if(v[i][j]==1)  k++;
}

if(k>0)
{
if((v[i][0]==v[i][4])&&(v[i][4]==1))k2(v);
if((v[i][2]==v[i][3])&&(v[i][3]==v[i][4]))k3(v);
if((v[i][0]==v[i][1])&&(v[i][1]==v[i][2]))k4(v);
if((v[i][1]==v[i][3])&&(v[i][3]==1))k5(v);
}
else cout<<"over"<<endl;
}
void cp2()
{
int  v[MAX][MAX] = {0};
int i,j;
int x;
int y;
int k=0;

v[4][0]=1;
v[4][4]=1;
show(v);
k2(v);

}
void cp3()
{
int  v[MAX][MAX] = {0};

v[4][2]=1;
v[4][3]=1;
v[4][4]=1;
show(v);
k3(v);

}
void cp4()
{
int  v[MAX][MAX] = {0};
int i,j;
int x;
int y;
int k=0;

v[4][0]=1;
v[4][1]=1;
v[4][2]=1;
show(v);
k4(v);

}
void cp5()
{
int  v[MAX][MAX] = {0};
int i,j;
int x;
int y;
int k=0;

v[4][1]=1;

v[4][3]=1;
show(v);
k5(v);

}
int player()
{
int v[MAX][MAX] = {0};
int x;
int y;
int k=3;
int state=1;
/*   time_t t;
srand((unsigned)time(&t));
k=rand()%5+1;

while(k--)
{
x=rand()%5;
y=rand()%5;
v[x][y]=1;
}*/
v[4][2]=1;v[4][3]=1;v[4][4]=1;
show(v);

while( state)
{
//cout<<"输入0由电脑解答,1则继续"<<endl;
scanf("%d",&state);
if(state==1)cp(v);
//  cout<<"熄灯前睡觉 输入坐标(x,y)"<<endl;
//cin>>x>>y;   x=x-1;y=y-1;
//play(v,x,y);  show(v);

}
}
int main()
{
cout<<"          欢迎参与点灯游戏     "<<endl<<"              由wzzx提供"<<endl;
cout<<"   游戏过程中可以选择电脑演示求解步骤  "<<endl;
cout<<"***************************************"<<endl;
player();
return 0;
}
用了 测试的步骤模仿了玩法
当然 同一天已发现一个统一的秘密 可以在不用数学分析的方式来解决这个问题
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: