一条简单的练习题但运行结果不知哪里出问题了~
150盏亮着的灯,各有一个开关控制着,按照顺序编号1、2、3、.....150.将编号为3的倍数的拉一次,再将编号为5的倍数的灯拉一下,拉完后还亮着的灯数量为多少盏?程序代码如下~
程序代码:#include<stdio.h>
#include<stdlib.h>
#define N 150
#define S(a) sizeof (a)/sizeof (a[0])
void fun(int a[],int s)
{
int i=0;
for (i=s;i<N+1;i+=s)
a[i]++;
}
int main()
{
int a[N+1]={0};
int b[]={3,5};
int len=S(b);
int i=0;
int count=0;
for (i=0;i<len;i++)
fun(a,b[i]);
for (i=1;i<N+1;i++)
a[i]%=2;
for (i=1;i<N+1;i++)
if (a[i]==0)
count++;
printf("%d\n",count);
return 0;
}
此题正确答案是90~但为什么这个程序的运算结果会是92?百思不得其解~不知道是哪里出问题了~求解~










代码很精炼~拜谢高人~