2036:【例5.3】开关门

2036:【例5.3】开关门


时间限制: 1000 ms         内存限制: 65536 KB
提交数: 8388     通过数: 5185

【题目描述】

宾馆里有n(2≤n≤1000)个房间,从1∼n编了号。第一个服务员把所有的房间门都打开了,第二个服务员把所有编号是2的倍数的房间“相反处理”,第三个服务员把所有编号是3的倍数的房间作“相反处理”…,以后每个服务员都是如此。当第n个服务员来过后,哪几扇门是打开的。(所谓“相反处理”是:原来开着的门关上,原来关上的门打开。)

【输入】

房间数n。

【输出】

一行,由小到大的打开门的房间序号,各序号之间用一个空格隔开。

分析:先设定一个数组,再遍历每个“服务员”,

#include<iostream>
//#include<iomanip>
//#include<cmath>
//#include<array>
//using std::array;
using std::cout;
using std::cin;
//using std::endl;
//using std::fixed;
//using std::setprecision;
//using std::pow;

int main()
{
	int n = 0;
	cin >> n;
	int num = 0;

	int a[1000]={};
    //初始值默认为0,那么就用1代表开门,0表示关门

	for (int i = 1; i <= n; ++i)//表示服务员
	{
		for (int j = 1; j <= n; ++j)//表示门
		{
			if (j % i == 0&&a[j]==0)
            //满足,则说明该服务员会进行相反操作
			{
				a[j] = 1;
			}
			else if(j%i==0&&a[j]==1)
			{
				a[j] = 0;
			}
		}
	}

	for (int i = 1; i <= n; ++i)
	{
		if (a[i]==1)
		{
			cout << i << " ";
		}
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值