偶是新会员,多多关照
点灯游戏大家都知道的吧
我的程序实现把5*5=25盏灯点亮,大家帮忙改一下,怎么样输入任意数N,实现N*N盏灯的算法
我的程序如下
//file name:diandeng.cpp
//该程序实现点灯游戏的结果;
#include <iostream>
#include <cmath>
using namespace std;
void chang(int[][5]);
void prin(int[][5]);
void main()
{int a[5][5] = {
{0,0,0,0,0},
{0,0,0,0,0},
{0,0,0,0,0},
{0,0,0,0,0},
{0,0,0,0,0}
};
cout<<"Before chenged\n";
prin(a);//打印输出a的原始状态;
cout<<"The order is:"<<endl;
chang(a);
cout<<"\nAfter changed:\n";
prin(a);//打印输出a的末状态;
}
//************************* chang函数 ***************
void chang(int a[][5])
{
int m=0;
int x=0;
do{m+=1;
for(int i=0;i<=4;i++)
{for(int j=0;j<=4;j++)
{if(a[i][j]==0)
{m-=1;
if(!(x%5))
cout<<'\n';
cout<<i+1<<','<<j+1<<'\t';
a[i][j]=1;//若当前值为0,则改变它;
if((i-1)>=0)//若第i-1列有元素,则执行if语句,否则跳过;
{if(a[i-1][j]==1)
a[i-1][j]=0;
else
a[i-1][j]=1;
}
if(i+1<=4)//若第i+1列有元素,则执行if语句,否则跳过;
{
if(a[i+1][j]==1) a[i+1][j]=0;
else a[i+1][j]=1;}
if((j-1)>=0)//若第j-1行有元素,则执行if语句,否则跳过;
{if(a[i][j-1]==1)
a[i][j-1]=0;
else
a[i][j-1]=1;
}
if((j+1)<=4)//若第j+1行有元素,则执行if语句,否则跳过;
{if(a[i][j+1]==1)
a[i][j+1]=0;
else
a[i][j+1]=1;}
x+=1;}
}
}
}while(m!=0);
}
//**************** prin函数 ****************************
void prin(int a[][5])
{
cout<<"a[5][5]=:"<<"\n{\n";
for (int m=0;m<=4;m++)
{
for(int n=0;n<=4;n++)
cout<<a[m][n]<<',';
cout<<'\n';}
cout<<'}'<<endl;
}