这道题意思是说:第一个人按1,3,5的顺序开关灯,第二个人按1、4、7的顺序开关,第三个人按1,5,9的顺序关灯;
可以发现,每个人开关灯的编号都是按他自己的编号累加的。
这道题用的是标记和模拟法。
先模拟一遍上述过程,在进行一次统计。
#include<bits/stdc++.h>
using namespace std;
int main()
{
bool a[105];
int n,s=0;
memset(a,0,sizeof(a));//把a数组全部变为0,设为开灯
scanf("%d",&n);//cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=100;j=j+i+1)//这是重点
{
if(a[j]==0) a[j]=1;
else a[j]=0;
//做相反操作(开灯变为关灯,关灯变为开灯)
}
}//模拟
for(int i=1;i<=100;i++)
{
if(a[i]==1) s++;
}//统计
printf("%d",s);//cout<<s;
}