开灯问题编程代码怎么写

时间:2025-01-26 17:54:40 网络游戏

开灯问题的编程代码可以通过以下步骤实现:

初始化灯的状态 :将所有灯的状态初始化为打开(通常用1表示)。

模拟每个人的操作:

对于每个人,遍历所有的灯,如果灯的编号是该人的编号的倍数,则切换灯的状态(即1变为0,0变为1)。

输出结果:

遍历所有的灯,输出状态为1的灯的编号。

```c

include

include

define MAXN 1000

int main() {

int n, k;

scanf("%d %d", &n, &k);

// 初始化所有灯为打开状态

int lights[MAXN] = {1};

// 模拟每个人的操作

for (int i = 1; i <= k; i++) {

for (int j = i; j <= n; j += i) {

lights[j] = 1 - lights[j]; // 切换灯的状态

}

}

// 输出结果

for (int i = 1; i <= n; i++) {

if (lights[i]) {

printf("%d ", i);

}

}

printf("\n");

return 0;

}

```

代码解释:

初始化

```c

int lights[MAXN] = {1};

```

这行代码将所有灯的状态初始化为1,表示所有灯都是打开的。

模拟操作

```c

for (int i = 1; i <= k; i++) {

for (int j = i; j <= n; j += i) {

lights[j] = 1 - lights[j];

}

}

```

这个嵌套循环遍历每个灯,如果灯的编号是当前循环变量`i`的倍数,则切换该灯的状态。

输出结果

```c

for (int i = 1; i <= n; i++) {

if (lights[i]) {

printf("%d ", i);

}

}

printf("\n");

```

这个循环遍历所有灯,输出状态为1的灯的编号。

示例输入输出:

输入:`7 3`

输出:`1 5 6 7`

这个代码可以处理最多1000盏灯和最多1000次操作,满足题目要求。