#include <math.h>
int question7()
{
int i,j,n,index,count=0;
int a[100]={0};
//循环100次,每次对数组从第i个开始间隔i取反
for (i=1;i<=100;i++)
{
n=1;
while(i*n<=100)
{
index=i*n-1;
a[index]=abs(a[index]-1);
n++;
}
}
for (j=0;j<100;j++)
{
if (1==a[j])
{
count++;
}
}
return count;
}
答案:根据题目意思可以得出以下三个结论:
1)对于每盏灯,当拉动的次数是奇数时,灯就是亮着的,当拉动的次数是偶数时,灯就是关着的。
2)每盏灯拉动的次数与它的编号所含约数的个数有关,它的编号有几个约数,这盏灯就被拉动几次。
3)1~100这100个数中有哪几个数,约数的个数是奇数。
由于最开始灯是灭的,所以,只有经过奇数次改变开关状态的灯是亮的,相对应的数学解释就是灯的编号有奇数个不同的约数,一个数的约数都是成对出现的,只有完全平方数约数的个数才是奇数个,例如:1的约数为1,4的约数为1、2、4,9的约数为1、3、9,以此类推,这100盏灯中有10盏灯是亮着的。它们的编号分别是: 1、4、9、16、25、36、49、64、81、100。
1.对于每盏灯,拉动的次数是奇数时,灯就是亮着的,拉动的次数是偶数时,灯就是关着的。
2.每盏灯拉动的次数与它的编号所含约数的个数有关,它的编号有几个约数,这盏灯就被拉动几次。
3.1——100这100个数中有哪几个数,约数的个数是奇数。我们知道一个数的约数都是成对出现的,只有完全平方数约数的个数才是奇数个。
所以这100盏灯中有10盏灯是亮着的。 它们的编号分别是: 1、4、9、16、25、36、49、64、81、100。
public static void main(String[] args) { // TODO code application logic here int a []=new int [100]; int count=0; for(int i=0;i<100;i++) a[i]=0;//0代表灯灭,1代表灯亮 for(int i=1;i<=100;i++)//100次操作 for(int j=0;j<100;j++) if((j+1)%i==0 && a[j]==0) a[j]=1; else if((j+1)%i==0 && a[j]==1) a[j]=0; for(int i=0;i<100;i++) { if (a[i]==1) { count++; System.out.print(i+1+" ");} } System.out.print("\n"+count); }
1.对于每盏灯,拉动的次数是奇数时,灯就是亮着的,拉动的次数是偶数时,灯就是关着的。
2.每盏灯拉动的次数与它的编号所含约数的个数有关,它的编号有几个约数,这盏灯就被拉动几次。
3.1——100这100个数中有哪几个数,约数的个数是奇数。我们知道一个数的约数都是成对出现的,只有完全平方数约数的个数才是奇数个。
所以这100盏灯中有10盏灯是亮着的。 它们的编号分别是: 1、4、9、16、25、36、49、64、81、100。