一条简单的练习题但运行结果不知哪里出问题了~
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?百思不得其解~不知道是哪里出问题了~求解~