题目:
有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 }
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 }