【发布时间】:2017-09-18 16:18:49
【问题描述】:
让一排8000盏灯。最初,只有位于左侧的那个被点亮。 然后,每一秒,都会执行以下操作:如果左边的灯在一秒前点亮,则每个灯都会改变状态(开或关)。最左边的灯一直亮着。该操作是瞬时的。 当右端的灯第一次点亮时,该过程停止。 有多少灯亮着?
我下面的问题实现是假的,你能帮帮我吗?
#include <cstdio>
int t[8001][2];
int main()
{
t[1][0] = 1;
t[1][1] = 1;
int cpt1 = 0, ip = 0;
while (t[8000][0] != 1 && t[8000][1] != 1)
{
ip++;
for (int j=2;j<8001;j++)
{
if(t[j-1][!(ip&1)])
t[j][(ip & 1)] = !t[j][!(ip & 1)];
}
}
for(int j = 1;j < 8001; j++)
cpt1 += t[j][1];
printf("cpt=%d\n", cpt1);
}
【问题讨论】:
-
首先想到的不是8001灯吗?无论如何-“是错误的”并没有告诉我们太多关于它为什么是错误的。包括错误消息或错误的原因。编辑:nvm,你正在使用 1-indexing.....
-
为什么需要二维数组?这个程序很难读。 更新啊,好的。我想这是为了“双缓冲”。虽然仍然不可读
-
无论如何。从小数字开始并打印出每个周期的输出以进行调试。如果我理解正确,最左边的灯应该每两个周期“发射”一次,每个周期都会向右传播。
-
#include<cstdio>+[C]标签 - 嗯。 -
@asterix "但我知道问题的解决方案不是那样。" --> 你期望什么?
标签: c implementation