C++求解
//有n个人,编号为1~n。开始时,所有人都站着,
//接着第2个及2的倍数的人坐下,
//然后,第3个人及3的倍数的人按相反的操作
//(站的人坐下,坐的人站起来),
//依此类推,一共操作到第k人及k的倍数,
//问最后哪些人站着?
//输入n和k,输出站着人的编号(k≤n≤10000)
//输入样例:
//7 3
//输出样例:
//1 5 6 7
#include<bits/stdc++.h>
using namespace std;
int main()
{
const int N=1e4;
int a[N];//0表站立,1表坐
int n,k;
cin>>n>>k;
for(int i=2;i<=k;i++)//每次变的人的始序号加1
{
for(int j=1;j<=n;j++)//??? 不理解
{
if(j%i==0) a[j]=!a[j];//取反; ;不理解
}
}
for(int i=1; i<=n; i++)//??? 不理解
{
if(a[i]==0) cout<<i<<" ";//如果站立,输出序号
}
return 0;
}