例如:4个灯泡(未亮着的状态),有四个灯泡要进行四次。第1次,是1的因数的灯泡按一下,就会有4个灯泡(状态亮着),第二次,是二的因数的灯泡按一下,就会有第二个和第四个灯泡(状态关了),第三次,是三的因数灯泡按一下,就会有第三个灯泡(状态关了),第四次,是四的因数的灯泡按一下,就会有第四个灯泡(状态开了)。最终只有1号和4号灯泡亮着的,一共有2个灯泡亮着。
问题:如果有n个灯泡(未亮着的状态),经过n次后,会有哪些号灯泡是亮着的?一共有几只灯泡亮着?
源程序:
#include<stdio.h>
int main()
{
int a[1000],b[1000],i,j=1,n,m,k=0;
printf("请输入灯泡个数:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
a[i]=i+1;
b[i]=0;
}
for(i=1;i<=n;i++)
{
for(m=0;m<n;m++)
{
if(a[m]%i==0)
b[m]=1-b[m];
}
}
for(i=0;i<n;i++)
{
if(b[i]==1)
{printf("灯泡%d亮着\n",i+1);
k++;
}
}
printf("一共%d灯泡亮着\n",k);
return 0;
}
运行结果:
通过以上结果,发现亮着灯泡都是n的平方,那么我们就知道了一个数学规律,只要灯泡的序号的因数的个数是奇数,灯泡一定会是亮着。
例如,4号灯泡,它的因数是1,2,4,因数的个数为奇数,所以他一定亮着。
目前我还是新手,程序还有很多不足,欢迎大家向我提建议,我会改进。