拉灯问题c语言编程,C语言 百人拉百灯问题

题目:

有100人,编号从1到100; 另有100盏灯,编号也从 1到100. 现要求每人去拉能被自己编号整除的所有电灯, 例如编号为1者应把所有的灯都拉一遍, 编号为2者应把所有编号为偶数的灯都拉一遍,而  编号为100者只能拉编号为100的灯. 假设一开始 所有的电灯都是灭的,那么最后有几盏灯是亮的? 编号分别是多少?

要求:

定义两个函数:

void switch_light(int light[], int man);

int lights_on(int *light, int *on);

main()中定义一个数组light,各个元素的值表示

各盏灯的亮灭状态(比如1表示亮,0表示灭),再

定义另外一个数组on,各个元素的值表示最后亮

着的灯的编号。

switch_light()的作用是编号为man的人尝试拉可

以被他编号整除的灯,结果影响数组light各元素

的值;

lights_on()统计一共有几盏灯是亮的,并把亮着

的灯的编号存放到on中,返回值是亮着的灯总数。

程序:

1 #include

2 #define LIGHT 100

3 int main(void)4 {5 int i, j, a[LIGHT + 1] = { 0 }, count = 0;6 for (i = 1; i <= LIGHT; i++)7 for (j = i; j <= LIGHT; j +=i)8 a[j] ^= 1;9 printf("●:亮 ○:暗\n");10 for (i = 1; i <= LIGHT; i++)11 {12 if(a[i])13 {14 printf("●");15 count++;16 }17 else printf("○");18 }19 printf("\n总计 %d 盏灯亮着", count);20 return 0;21 }

9f3ec56417c14727975dd487542b8b8b.png

1 #include

2 intmain() //   main()中定义一个数组light,各个元素的值表示各盏灯的亮灭状态(比如1表示亮,0表示灭),再定义另外一个数组on,各个元素的值表示最后亮着的灯的编号。3 {4 void switch_light(int light[], intman); //声明拉灯函数5 int lights_on(int *light, int *on); //声明统计函数6 int i,man,light[101]={0},on[100],sum;7 for(man=1;man<=100;man++)8 switch_light(light,man);9 sum=lights_on(light,on);10 printf("last there are %d lights on!\n",sum);11 printf("these lights are:");12 for(i=0;i

26 int lights_on(int *light, int *on) //lights_on()统计一共有几盏灯是亮的,并把亮着的灯的编号存放到on中,返回值是亮着的灯总数。27 {28 int i,j=0;29 for(i=1;i<=100;i++)30 if(light[i]==1)31 {32 on[j]=i; j++;33 }34 return(j);35 }

f377c59938a54febe4bedb7e1c00ba6c.png

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值