您的位置:首页 > 其它

【蓝桥第五周】小小故事

2015-12-20 21:56 309 查看
小小故事

题目描述 Description

在天朝的鱼C总基地,大厅的墙壁上有N盏灯,分别按顺序从1到N编号。每盏灯都可以每打开或关上。在每一秒钟,如果第I+1盏灯是亮的,那么第I盏灯在下一秒会变化它的状态;特别的,如果第1盏灯是亮的,那么第N盏灯在下一秒会变化它的状态。小甲鱼老师给你某一时刻所有灯的状态,

希望你能求出它们在M秒之后的状态。

输入描述 Input Description

第一行输入两个数N,M。第二行,依次输入N个数,不是0就是1。描述初始时各盏灯的状态。如果这个数为0,表示第I盏灯是灭的;如果这个数为1,表示第I盏灯是亮的。

输出描述 Output Description

输出有N个数,不是0就是1。描述M秒后各盏灯的状态。如果这个数为0,表示第I盏灯是灭的;如果这个数为1,表示第I盏灯是亮的。

样例输入 Sample Input

3 1

0 0 1

样例输出 Sample Output

0 1 1

[解题思路]

直接暴力枚举了,两个for循环,第一个for控制秒数M,循环M次,第二个for控制灯N,循环N次,但有一个需要注意的地方就是,这里的解法是正序遍历各盏灯(即i=1..n),例如在考虑第i盏灯的变化状态的时候,受第i+1盏的影响,特别的,第n盏灯的变化状态是受第1盏灯的影响,而从1到n的遍历,第1盏灯会被第2盏灯影响,改变状态。

解决的方法是先用个变量保存未改变前的第1盏灯。

[代码实现]

#include<iostream>
using namespace std;
int main()
{
int n,m;
cin>>n>>m;
int *a=new int [n+1];
for(int i=1;i<=n;i++)
cin>>a[i];
int temp; /* 存放a[1] */
for(int i=1;i<=m;i++)      /* m控制秒数 */
for(int j=1;j<=n;j++)  /* n控制灯数 */
{
if(j == 1)
temp=a[1];
if(j == n)
{
if(temp == 1)
a[j] = !a[j];
continue;
}
if(a[j+1] == 1)
a[j] = !a[j]; /* 若a[j]为1则变为0,若为0则变为1 */
}
for(int i=1;i<=n;i++)
cout<<a[i]<<" ";
delete a;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: