C语言 开关灯实验

实验说明
有 n 盏灯,编号 1~n。第 1 个人把所有灯打开,第 2 个人按下所有编号为 2 的倍数的开关,第 3 个人按下所有编号为 3 的倍数的开关,依次类推。按开关时其中关掉的灯将被打开,开着的灯将被关闭。一共有 k 个人,输出最后开着的灯的编号。n 和 k 在运行时输入,1≤k≤n≤1000。输出的时候每行输出 10 个序号且利用输出格式实现左对齐。
代码实现

  • 用 0 表示灯关着,1 表示灯开着。先定义一个数组,全部赋值为 0。
  • 用取余的方式判断第m个人是否要对第n个灯进行操作。
  • 摁过开关后 0 变成 1,1 变成 0。最后输出所有为 1 的元素。
/*n人开关灯实验*/
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int arr[1000],lnum,pnum,count=0;

    printf("输入灯的数目:");
    scanf("%d",&lnum);
    for(int i=0;i<lnum;i++)   //赋初值
        arr[i]=0;
    printf("输入人的个数:");
    scanf("%d",&pnum);
    
    for(int m=1;m<=pnum;m++) //依次开关灯;
    {
        for(int n=1;n<=lnum;n++)
        {
            if(n%m==0)
            {
                if(arr[n-1]) arr[n-1]=0;
                else arr[n-1]=1;
            }
        }
    }

    for(int i=0;i<lnum;i++)  //输出开着的灯的编号
    {
        if (arr[i]!=0)
        {
            printf("%-4d",i+1);
            count++;
            if (count%10==0) printf("\n");
        }
    }

    return 0;
}

实验结果
输入灯的数目:200
输入人的个数:10
1 4 9 11 12 13 14 15 17 18
19 20 21 23 27 29 31 35 37 41
42 43 44 47 52 53 54 56 59 60
61 67 68 70 71 72 73 75 76 79
81 83 89 90 92 97 98 99 100 101
103 107 109 112 113 116 117 121 124 127
131 132 137 139 143 144 147 148 149 151
153 154 156 157 162 163 164 165 167 168
169 171 172 173 175 179 181 182 187 188
191 193 195 197 198 199

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BTWBB

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值