#include<stdio.h>
#include<iostream>
using namespace std;
const int N = 10;
void LightOpen();
void InternalNum();
int main ()
{
LightOpen();
InternalNum();
}
void LightOpen()
{
int a[N + 1] = {0};//进行初始化 同时代表编号为1的同学将全部灯关闭 0代表关闭
int k;
for(int i = 2; i <= N; i++)
{
k = 1;//起计数的作用
while(i * k <= N)
{
a[i * k] = 1 - a[i * k];//技巧 使元素的值在0与1之间变换
k++;
}
}
for(int i = 1; i <= N; i++)
{
if(a[i])
cout << i << "light is open" << endl;
}
cout <<endl;
}
void InternalNum()
{
int p, q;
int maxs, m, n;//m,n用于记录当前最大的间隔数字
int k;
int num[N] = {2, 5, 1, 8, 6, 5, 7, 3, 2, 1};
maxs = 0;//进行初始化
for(int i = 0; i < N; i++)
{
p = (N + i - 1) % N;//因为pq之间相隔一个数 因此p有下溢的危险 而q有上溢的
[算法设计与分析]3.3.1算术运算的妙用(开灯问题+间隔数)
最新推荐文章于 2021-05-16 16:14:23 发布