gpt4 book ai didi

c - 学生储物柜拼图

转载 作者:行者123 更新时间:2023-11-30 21:00:57 24 4
gpt4 key购买 nike

/* 有 100 名学生和 100 个储物柜。学生 1 全部打开,学生 2 每第二个关闭一次,学生 3 每第三个更改一次储物柜(如果打开则关闭,如果关闭则打开),学生 4 每四个储物柜更换一次,依此类推,为所有 100 名学生提供服务。哪个储物柜会保持打开状态? */

这是迄今为止我的代码:

#include <stdio.h>

int main(void)
{
int locker[100], i, closed = 0, opened = 0;

for(i=0; i<100; i++) locker[i] = 1;//0 means closed locker, 1 means open locker
for(i=1; i<101; i++) if(i % 2 == 0) locker[i-1] = 0; // every second locker is closed by second student...(2,4,6,7)
for(i=3; i<101; i++){ // i means student no. i
if(locker[i-1] == 0) locker[i-1] = 1;
if(locker[i-1] == 1) locker[i-1] = 0;

如果我用“else”替换“if(locker[i-1] == 1)”,为什么程序不起作用?正确的结果是打开 1 关闭 99。如果我使用“其他”结果将变为打开 50 和关闭 50

}
for(i=0; i<100; i++){
if(locker[i] == 0) closed = closed + 1;
else opened = opened + 1;
}
printf("opened locker %d\nclosed locker %d", opened, closed);
return 0;

}

这是我在堆栈溢出中的第一篇文章。如果我做错了什么请纠正我。

最佳答案

我会给你一些提示来帮助你。

  • 答案是 10 个储物柜保持开放状态,90 个处于关闭状态。
  • 对于这个特定问题,如果避免从零开始的索引,则编写代码会更容易。所以将数组声明为 int locker[101];,然后使用索引 1 到100代表100个储物柜。
  • 第 N 个学生应该更换每个第 N 个储物柜。所以你需要两个嵌套的 for 循环。外层循环跟踪n,并且内环翻转储物柜。
  • 仅影响每个第 N 个储物柜的内部循环应如下所示这个

    for ( i = n; i <= 100; i += n ) // every Nth locker
    locker[i] = 1 - locker[i]; // flip the locker

    请注意,我们有 i=n,而不是普通的 i=0i++i+=n。因此,例如,如果 n 为 3,则 i 的值是 3,6,9,...

关于c - 学生储物柜拼图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37998168/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com